2012-01-04 7 views
6

io_service :: poll_one io_serviceオブジェクトのイベント処理ループ を実行して、1つのレディハンドラを実行します。boost :: io_service poll_oneとrun_oneの違いは何ですか?

io_service :: run_one多くても1つのハンドラで実行するio_serviceオブジェクトのイベント処理ループ を実行します。

この説明から、poll_oneは複数のハンドラを実行する可能性がありますか? run_oneまたはpoll_oneは、run()と呼ばれるスレッド、またはpoll_one/run_oneを呼び出すスレッドのみを使用しますか?

ASIOのドキュメントは非常にまばらです。

+0

1が1つのREADYハンドラを実行いくつかのドキュメントをチェックすることができ、他は(準備ができてかない)1つのハンドラを実行。 – akappa

+0

OK、READYハンドラとそれ以外のハンドラの違いは何ですか? – Eloff

+0

ソケットを持っていて、ハンドラの仕事が何かを読み込もうとしている場合、準備ができているハンドラは、空でないソケットに接続されているハンドラです(データがネットから来るのを待つ必要はありません) ) – akappa

答えて

12

poll_one処理する予定のイベントがない場合は、直ちに(非ブロック)返されます。

run_oneは、1つのイベントが処理できる状態になるまで、呼び出しスレッドをブロックします。

あなたはまた、here

+0

run_oneのドキュメントでは、「正確に1つのハンドラを実行するまでブロック」を読み取る必要があります。 – Eloff

+0

はい、別の言葉を入れてください:) –

+0

それは混乱しています。 「最大でも」は0..1を意味しますが、イベントを処理するまでブロックすると、処理された0のイベントをいつ返すことができますか? – Eloff

関連する問題