dbus:冲洗连接?

Posted

技术标签:

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

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

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

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

【问题讨论】:

【参考方案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:那么是的,您应该刷新消息队列。我将编辑我的答案以使其更加明显。

以上是关于dbus:冲洗连接?的主要内容,如果未能解决你的问题,请参考以下文章

在 PyDbus 模拟中使用私有 DBus 连接

Bluez BLE 连接监控使用 DBUS-Python

如何使用 dbus 和 NetworkManager 激活连接

e NetworkManager *** 连接的 dbus 信号处理程序

如何使用 dbus 连接 HAL

这个 Qt DBus 信号连接代码是不是正确?