DBUS——多线程处理
DBUS - multithread processing
我的程序中有一个主循环,它调用dbus_connection_read_write_dispatch
方法。我有一些注册回调,当消息到达时调用。在这个回调中,我还处理响应并发回响应。问题是,有时它需要很多时间,所以它可能会阻止从DBUS接收消息。我可以从多个线程调用同一连接上的dbus_connection_read_write_dispatch()
吗?在处理前一个DBUS消息的同时,是否有可能接收新的DBUS消息?或者在另一个线程中处理响应比在调用回调的主循环中处理响应更好吗?
你可以调用dbus_connection_read_write_dispatch()从多个线程,如果你已经调用函数dbus_threads_init_default()至少一次。相反,一个更好的方法是让一个线程运行dbus调度程序,并使用一个线程池来处理来自回调的数据。查看dbus_threads_init_default()获取更多信息
通过freedesktop.org提供的文档,您可以。
但是如果您直接从不同的线程操作相同的DBusConnection实例,例如:在一个线程中调用dbus_connection_send_with_reply_and_block
,而另一个线程阻塞dbus_connection_read_write_dispatch
,连接可能工作不正常。根据官方文件,当调用回调函数时,DBus连接将被锁定。DBusConnection
在我的情况下,即使返回消息被发送到我的进程(我在dbus-monitor
上看到了它),dbus_connection_send_with_reply_and_block
也没有返回。调用dbus_thread_init
根本不起作用
最近我使用委托在一个线程中发送/接收/调度所有dbus消息,问题消失了
freedesktop.org邮件列表中的邮件
- 多线程处理中的静态成员变量
- Opencv cpp 使用多线程处理同一视频的不同部分
- 对象析构函数在多线程处理时不断被调用,但该对象并未超出范围
- 使用 wxWidgets 进行多线程处理时出现奇怪的行为
- 通过多线程处理确定每个字符在文件中出现的次数
- 使用多线程处理的异步请求
- 多线程处理,同时保持部分序列
- 如何在类中进行 c++ 多线程处理(将线程引用保留为成员 var)
- SDL 带变量的多线程处理 -- 无法按预期工作
- 使用多线程处理对象数组 - 无效使用 void 表达式错误
- 如何使用"priority"进行多线程处理?
- 使用简单的过程进行慢速多线程处理
- C++11 使用共享对象的多线程处理
- 在多线程处理时将参数传递给函数
- 使用 vfork 进行多线程处理
- C++ 多线程处理速度慢
- 在 c++ 中多线程处理时与 cout 和 printf 的区别
- 使用windows.h库中函数的多线程处理
- 具有重载成员函数的多线程处理
- DBUS——多线程处理