2016-05-08 17 views
1

async_readは、要求されたバイト数を受信したときにコールバックを呼び出します。これは、async_read_someへの複数の呼び出しを暗示する可能性があります。asio:複数の保留中のasync_read?

ドキュメントでは、保留中のasync_read_someが1つしかないことが指定されています。コールバックは、次のasync_read_someが発行される前にコールされなければなりません。

async_readはどうですか?複数のasync_readをキューに入れることはできますか?はいの場合、実行の順序は保たれることが保証されていますか?

+2

'async_read'はフリー関数なので、同じストリームの複数回ではなく、異なるストリームからデータを読み込むために複数回呼び出すことができます。 'async_read_some'はソケット/ストリームのメンバ関数です。なぜなら、保留中の 'async_read_some'が1つしかないからです。私よりも「アシオ」の内部の仕組みをよりよく理解している人が、なぜ正確に説明できるのだろうと確信しています。 – kenba

答えて

1

async_read(...)

の文書によれば、この動作は、ストリームのasync_read_some関数にゼロ以上の呼び出し規約で実装され、そして合成操作として知られています。プログラムは、この操作が完了するまで、ストリームがその他の読み取り操作(async_read、ストリームのasync_read_some関数、または読み込みを実行する他の合成操作など)を実行しないようにする必要があります。これが提供バッファが満たされたときに、一度だけである必要があり、完了条件 - 完了ハンドラ(コールバック)が呼び出されるまで、あなたが同じストリーム上の任意のさらなるasync_read操作を開始できないことを意味します

満足しているか、何らかのエラーが発生しています。

複数のasync_read操作を「キューに入れる」という意味では完全にはわかりません。 async_read操作のシーケンスを実装する方法は、完了ハンドラで次の操作を開始することです。

+1

ありがとうございました。これは私の質問に答える。私はasync_readを同じハンドラで複数回呼び出すことを意味します。 – chmike

関連する問題