【发布时间】:2010-12-12 03:54:48
【问题描述】:
当我执行“dbus_connection_close”时,是否需要刷新消息队列?
换句话说,我是否需要继续使用“dbus_connection_read_write_dispatch”,直到收到“断开连接”指示,还是可以安全地停止调度?
更新:我需要以干净的方式关闭与 DBus 的连接。通过阅读文档,必须在“取消引用”连接之前完成所有清理工作,并且这个过程在 IMO 没有很好的记录。
【问题讨论】:
当我执行“dbus_connection_close”时,是否需要刷新消息队列?
换句话说,我是否需要继续使用“dbus_connection_read_write_dispatch”,直到收到“断开连接”指示,还是可以安全地停止调度?
更新:我需要以干净的方式关闭与 DBus 的连接。通过阅读文档,必须在“取消引用”连接之前完成所有清理工作,并且这个过程在 IMO 没有很好的记录。
【问题讨论】:
经过一番挖掘,似乎有两种类型的连接:共享和私有。
共享连接不能关闭只是未引用。此外,似乎不必刷新和调度连接除非必须传递传出消息。
就我而言,我只需要尽快结束通过 DBus 进行的通信,而无需尝试挽救任何传出消息。
因此,简短的回答是:NO - 在dbus_connection_unref 之前不需要进行刷新/调度。
【讨论】:
看at the documentation for dbus_connection_close(),may be invoked唯一的就是dispatch status函数,表示连接已经关闭。
因此,在这里订购是您可能需要注意的事情......即在消息队列中留下内容之前收到关闭/断开连接的通知。
查看source of the function,看起来它唯一要做的就是在失败时返回,即无效连接/空指针。否则,它(似乎)就挂断了。
这意味着是的,您可能应该在挂断之前刷新消息队列。
免责声明:我只需要与 dbus 谈过几次,我绝不是这方面的权威。
【讨论】: