【问题标题】:DBUS - multithread processingDBUS——多线程处理
【发布时间】:2013-06-19 03:50:21
【问题描述】:

我的程序中有一个主循环,它从 dbus 调用此方法: dbus_connection_read_write_dispatch 我有一些注册的回调,它们在消息到达时被调用。在此回调中,我还处理响应并发送回响应。问题是有时它需要很长时间,所以它可能会阻止接收来自 DBUS 的消息。 问题 - 我可以从多个线程在同一个连接上调用 dbus_connection_read_write_dispatch() 方法吗?然后可能会在处理前一个 DBUS 消息时接收到新的 DBUS 消息。 或者也许更好的想法是在另一个线程中处理响应而不是主循环,从回调被调用?

谢谢

【问题讨论】:

    标签: c++ multithreading dbus


    【解决方案1】:

    如果您至少调用了一次 dbus_threads_init_default() 函数,则可以从多个线程调用 dbus_connection_read_write_dispatch()
    更好的方法是使用单个线程运行 dbus 调度程序并使用线程池处理来自回调的数据。
    请参阅dbus_threads_init_default() 了解更多信息。

    【讨论】:

      【解决方案2】:

      通过freedesktop.org提供的文档,可以。

      但是,如果您直接使用来自不同线程的相同 DBusConnection 实例进行操作,例如。当另一个线程阻塞dbus_connection_read_write_dispatch 时,在线程中调用dbus_connection_send_with_reply_and_block,连接可能工作不正常。根据官方文档,调用回调函数时DBus连接会被锁定。DBusConnection

      在我的情况下,即使返回消息被发送到我的进程,dbus_connection_send_with_reply_and_block 也没有返回(我在 dbus-monitor 上看到过)。调用dbus_thread_init 根本不起作用。

      最近我使用委托在一个线程中发送/接收/分派所有dbus消息,问题消失了。

      A mail in mailing list of freedesktop.org

      【讨论】:

        猜你喜欢
        • 2017-04-12
        • 1970-01-01
        • 1970-01-01
        • 2012-03-17
        • 2011-09-17
        • 2013-04-03
        • 1970-01-01
        相关资源
        最近更新 更多