c++ DBUS -多线程处理

fzwojiic  于 2023-04-13  发布在  其他
关注(0)|答案(2)|浏览(374)

我在程序中有一个主循环,它调用dbus_connection_read_write_dispatch方法。我有一些注册的回调函数,当消息到达时会被调用。在这个回调函数中,我也在处理响应并发回响应。问题是有时候它需要很多时间,所以它可能阻塞了从DBUS接收消息。我可以在同一个连接上从多个线程调用dbus_connection_read_write_dispatch()吗?那么,是否可以在处理前一个DBUS消息的同时接收新的DBUS消息?或者在另一个线程中处理响应比在主循环中调用回调更好?

anauzrmj

anauzrmj1#

如果您至少调用了一次函数dbus_threads_init_default(),则可以从多个线程调用dbus_connection_read_write_dispatch()
相反,更好的方法是让一个线程运行dbus调度器,并使用线程池处理来自回调的数据。
有关详细信息,请参见dbus_threads_init_default()。

64jmpszr

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

相关问题