3

「dbus_connection_close」を実行するとき、メッセージ キューをフラッシュする必要がありますか?

言い換えれば、「切断」の表示を受け取るまで「dbus_connection_read_write_dispatch」を続行する必要がありますか、それともディスパッチを停止しても安全ですか?

更新: DBus への接続をクリーンな方法で閉じる必要があります。ドキュメントを読むと、接続を「参照解除」する前にすべてのクリーンアップを行う必要があり、このプロセスは十分に文書化された IMO ではありません。

4

2 に答える 2

2

さらに調べてみると、接続には共有とプライベートの 2 種類があるようです。

共有接続は、参照されていないだけで閉じてはなりません。さらに、送信メッセージを配信する必要がない限り、接続をフラッシュしてディスパッチする必要があるようには見えません。

私の場合、送信メッセージを回収しようとせずに、できるだけ早く DBus 経由の通信を終了する必要がありました。

したがって、短い答えは次のとおりです。いいえ - の前にフラッシュ/ディスパッチを行う必要はありませんdbus_connection_unref

于 2009-11-05T15:03:35.497 に答える
0

dbus_connection_close() のドキュメントを見ると、呼び出される可能性があるのは、接続が閉じられたことを示すディスパッチ ステータス関数だけです。

したがって、ここでの順序付けには、おそらく注意を払う必要があります..つまり、メッセージ キューに何かが残される前に、接続が閉じられたり切断されたりしたことを通知されます。

関数のソースを見ると、失敗した場合、つまり無効な接続/ NULL ポインターが返されるだけのように見えます。そうしないと、ハングアップするだけのようです。

これは、はい、電話を切る前にメッセージ キューをフラッシュする必要があることを意味します。

免責事項: 私は dbus とは数回しか話をしたことがありません。私は決してその権威ではありません。

于 2009-11-02T02:31:43.620 に答える