boost.asio TCPソケット、ウィルの非同期操作が注文できますか?

StackOverflow https://stackoverflow.com/questions/1854115

  •  13-09-2019
  •  | 
  •  

質問

午前はブーストを呼び出していた場合:: ASIO :: async_write / async_read直接互いの後、データを注文するのでしょうか?それとも私が書き込みを呼び出しています前に、コールバックで待機する必要があります/もう一度読みますか?

事前に感謝します!

役に立ちましたか?

解決

データを注文することが保証されていない、あなたはこれらの機能を使用している場合は、再び書き込む前にコールバックを待つ必要があります。

async_write の観点から考察、また async_read に適用される)

のasync_write が基本となるストリームののasync_write_some の関数の複数の呼び出しの面で実装されているので、

、これらの呼び出しがアトミックではありません。各呼び出しは、ストリームにデータを書き込もうとあなた自身をコーディング可能性があるとして、完了を待っている影響で、一部の操作に対処するための内部コールバックを持っています。あなたが完了するのを待っていないのであれば、あなたは容易に混合データで終わる可能性があります。

また、スレッドを考慮する必要があります。あなたが複数回ストリーム上で、のasync_x を呼び出す場合は、未定義の動作につながる、異なるスレッドで同じ基になるストリームに同時操作で終わる可能性があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top