5


2

boost io_serviceのアクティブなハンドラーをリストする

職場のクライアント/サーバーシステムの単体テストを構築しているときに、アクティブなハンドラーをすべてシャットダウンした後、io_serviceが解放されないという問題に遭遇しました(認識している)。

1日コードをトロールした後、クライアントのシャットダウン手順に統合されていない誤ったハンドラーに出会いました。

私の質問はこれです:boost io_serviceで現在アクティブなハンドラをリストする簡単な方法はありますか?そうでない場合は、なぜですか?

任意の洞察力がいただければ幸いです。

1 Answer


1


いくつか問題があります。

  • 簿記は、特に次のシステムでは高価になります 多数の操作と重要な並行性。

  • リストを取得したとしても、それが最新かどうかはわかりません。

    これらがboost

    asioの特定の理由であるかどうかはわかりませんが、これらの理由は私に飛びつきます。

実際の問題を解決するには、デストラクタとスコープがあなたの友達です。 高レベルのオブジェクトへのハンドルのコンテナーがあると便利です(例: ソケットリスナー)、シャットダウンしたいときにこれらをスコープから外します。 shared_ptrは良いと思いますが、あらゆる種類のバリアントを使用できます。

停止したいすべてのオブジェクトで `stop()`メソッドを呼び出す必要がある場合、何かを忘れるでしょう。 デストラクタに作業を任せてください。