boost.asio TCPソケット、ウィルの非同期操作が注文できますか?
-
13-09-2019 - |
質問
午前はブーストを呼び出していた場合:: ASIO :: async_write / async_read直接互いの後、データを注文するのでしょうか?それとも私が書き込みを呼び出しています前に、コールバックで待機する必要があります/もう一度読みますか?
事前に感謝します!
解決
データを注文することが保証されていない、あなたはこれらの機能を使用している場合は、再び書き込む前にコールバックを待つ必要があります。
( async_write の観点から考察、また async_read に適用される)
のasync_write が基本となるストリームののasync_write_some の関数の複数の呼び出しの面で実装されているので、、これらの呼び出しがアトミックではありません。各呼び出しは、ストリームにデータを書き込もうとあなた自身をコーディング可能性があるとして、完了を待っている影響で、一部の操作に対処するための内部コールバックを持っています。あなたが完了するのを待っていないのであれば、あなたは容易に混合データで終わる可能性があります。
また、スレッドを考慮する必要があります。あなたが複数回ストリーム上で、のasync_x を呼び出す場合は、未定義の動作につながる、異なるスレッドで同じ基になるストリームに同時操作で終わる可能性があります。
所属していません StackOverflow