多くのtcp接続を処理するために(シングルスレッド)boost::asio:io_service
を使用しています。接続ごとに、私はタイムアウトを捕まえるためにdeadline_timerを使います。いずれかの接続がタイムアウトした場合、他の接続の結果は使用できません。したがって、私はio_serviceを完全に再起動したいと思います。 io_service.stop()
を呼び出すと、キュー内の「終了済み」ハンドラが呼び出され、キュー内でエラーが発生したハンドラが呼び出されることが考えられました。stop()の後にboost :: asio :: io_serviceをクリアします。
ハンドラがキューに残っているように見えるため、io_service.reset()
以降を呼び出すと、io_service.run()
は古いハンドラをバックアップします。 io_service.stop()
が呼び出された後でも実際にハンドラがキューに残っていることを誰でも確認できます。もしそうなら、io_serviceを完全にリセットする可能性はありますか?キューに入れられたハンドラをすべて削除しますか?