通过www.example.com提供的文档freedesktop.org,您可以。 但是如果你直接从不同的线程操作同一个DBusConnection示例,例如在一个线程中调用dbus_connection_send_with_reply_and_block,而另一个线程阻塞在dbus_connection_read_write_dispatch上,则连接可能无法正常工作。根据官方文档,当调用回调函数时,DBus连接将被锁定。DBusConnection 在我的情况下,即使返回消息被发送到我的进程,dbus_connection_send_with_reply_and_block也没有返回(我在dbus-monitor上看到过)。调用dbus_thread_init根本不起作用。 最近我使用一个委托在一个线程中发送/接收/分派所有dbus消息,问题消失了。 A mail in mailing list of freedesktop.org
2条答案
按热度按时间anauzrmj1#
如果您至少调用了一次函数dbus_threads_init_default(),则可以从多个线程调用dbus_connection_read_write_dispatch()。
相反,更好的方法是让一个线程运行dbus调度器,并使用线程池处理来自回调的数据。
有关详细信息,请参见dbus_threads_init_default()。
64jmpszr2#
通过www.example.com提供的文档freedesktop.org,您可以。
但是如果你直接从不同的线程操作同一个DBusConnection示例,例如在一个线程中调用
dbus_connection_send_with_reply_and_block
,而另一个线程阻塞在dbus_connection_read_write_dispatch
上,则连接可能无法正常工作。根据官方文档,当调用回调函数时,DBus连接将被锁定。DBusConnection在我的情况下,即使返回消息被发送到我的进程,
dbus_connection_send_with_reply_and_block
也没有返回(我在dbus-monitor
上看到过)。调用dbus_thread_init
根本不起作用。最近我使用一个委托在一个线程中发送/接收/分派所有dbus消息,问题消失了。
A mail in mailing list of freedesktop.org