0

このboost::asio::io_serviceような from レシピで作成されたスレッドプールがあります。プール内の次のタスクに置き換えられるように、投稿されたタスクを(スレッドを強制終了せずに)中断する方法を知りたいですか?

4

1 に答える 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 に答える