【问题标题】:dbus: flush connection?dbus:冲洗连接?
【发布时间】:2010-12-12 03:54:48
【问题描述】:

当我执行“dbus_connection_close”时,是否需要刷新消息队列?

换句话说,我是否需要继续使用“dbus_connection_read_write_dispatch”,直到收到“断开连接”指示,还是可以安全地停止调度?

更新:我需要以干净的方式关闭与 DBus 的连接。通过阅读文档,必须在“取消引用”连接之前完成所有清理工作,并且这个过程在 IMO 没有很好的记录。

【问题讨论】:

    标签: c linux dbus


    【解决方案1】:

    经过一番挖掘,似乎有两种类型的连接:共享和私有。

    共享连接不能关闭只是未引用。此外,似乎不必刷新和调度连接除非必须传递传出消息。

    就我而言,我只需要尽快结束通过 DBus 进行的通信,而无需尝试挽救任何传出消息。

    因此,简短的回答是:NO - 在dbus_connection_unref 之前不需要进行刷新/调度。

    【讨论】:

      【解决方案2】:

      at the documentation for dbus_connection_close()may be invoked唯一的就是dispatch status函数,表示连接已经关闭。

      因此,在这里订购是您可能需要注意的事情......即在消息队列中留下内容之前收到关闭/断开连接的通知。

      查看source of the function,看起来它唯一要做的就是在失败时返回,即无效连接/空指针。否则,它(似乎)就挂断了。

      这意味着是的,您可能应该在挂断之前刷新消息队列。

      免责声明:我只需要与 dbus 谈过几次,我绝不是这方面的权威。

      【讨论】:

      • 我的问题实际上是相反的:我需要关闭与 DBus 的连接并确保执行必要的清理。
      • @jldupont:那么是的,您应该刷新消息队列。我将编辑我的答案以使其更加明显。
      猜你喜欢
      • 2015-03-16
      • 2011-11-10
      • 2018-06-24
      • 1970-01-01
      • 2018-11-18
      • 2012-04-26
      • 2012-01-05
      • 1970-01-01
      • 2011-04-09
      相关资源
      最近更新 更多