2009-11-02 80 views
3

當我執行「dbus_connection_close」時,是否需要刷新消息隊列?dbus:刷新連接?

換句話說,我是否需要繼續「dbus_connection_read_write_dispatch」,直到收到「斷開連接」指示或停止調度安全爲止?

更新:我需要以乾淨的方式關閉與DBus的連接。從閱讀文件中,所有的清理工作必須在「未參考」連接之前完成,並且這個過程沒有很好地記錄IMO。

回答

2

經過一番深入挖掘,看起來有兩種類型的連接:共享和私有。

共享連接一定不能被關閉只是未參考。此外,看起來連接必須被刷新&調度,除非傳出的消息必須傳遞。

就我而言,我只是需要儘快結束DBus上的通信,而不嘗試挽救任何傳出的消息。

因此,簡短的回答是:否 - 在dbus_connection_unref之前不需要衝水/不需要調度。

0

尋找at the documentation for dbus_connection_close(),唯一may be invoked是調度狀態函數來指示連接已關閉。

因此,在這裏訂購是您可能要注意的事情。即在留在消息隊列中的東西之前收到關閉/斷開連接的通知。

看看source of the function,看起來它唯一要做的就是返回失敗,即無效連接/空指針。否則,它(似乎)只是掛斷電話。

這意味着是的,你可能應該在掛斷之前刷新消息隊列。

免責聲明:我只需要跟dbus聊幾次,我絕對不是一個權威人士。

+0

我的問題實際上是相反的:我需要關閉與DBus的連接,並確保我執行必要的清理。 – jldupont 2009-11-02 14:05:17

+0

@jldupont:那麼是的,你應該刷新消息隊列。我會編輯我的答案更明顯。 – 2009-11-02 14:07:01

+0

@tinkertim:謝謝你的努力。 – jldupont 2009-11-05 15:00:13