このboost::asio::io_service
ような from レシピで作成されたスレッドプールがあります。プール内の次のタスクに置き換えられるように、投稿されたタスクを(スレッドを強制終了せずに)中断する方法を知りたいですか?
1037 次
1 に答える
1
一般に、boost::asio のコールバックはかなり高速です。彼らはただいくつかの仕事をして、別の仕事をスケジュールして終了するべきです。これは、タスクが CPU を解放し、他のタスクが実行に移されるポイントになります。
boost::thread::interrupt()
とがありますが、中断点boost::thread_group::interrupt_all()
でしか実行スレッドを停止できませんでした。中断は例外と見なされます。これは、何らかの方法で例外を処理する必要があることを意味します-現在のタスクを解放します。処理の 1 つのステップを実行し、残りのハンドラーをスケジューリングするよりも、はるかに複雑です。boost::thread_interrupted
さらに、独自のルーチンを実行するスレッドで遊ぶこともできますが、interrupt()
実行interrupt_all()
中のスレッドには当てはまりませんio_service::run()
。これは、予期しない動作で終了する可能性がある非同期ハンドラーではなく、メソッドboost::thread_interrupted
内でスローされていると想像できます。run()
于 2012-05-29T11:26:56.760 に答える