Frage

Wenn am boost nennt :: asio :: async_write / async_read direkt hintereinander, werden die Daten bestellt werden? Oder muss ich auf den Rückruf warten, bevor ich schreiben nenne / lesen wieder?

Vielen Dank im Voraus!

War es hilfreich?

Lösung

Die Daten werden nicht garantiert bestellt werden, und wenn Sie diese Funktionen verwenden, sollten Sie für den Rückruf warten, bevor sie wieder zu schreiben.

(Diskussion in Bezug auf async_write , gilt auch für async_read )

Da async_write in Bezug auf mehrere Anrufe auf die zugrunde liegende Stream des implementiert async_write_some Funktion, diese Anrufe sind nicht atomar. Jeder Aufruf versucht, Daten in den Stream zu schreiben und hat einen internen Rückruf mit Teiloperationen zu behandeln, in der Tat auf Abschluss warten, wie Sie selbst codieren könnten. So könnte man leicht mit gemischten Daten am Ende, wenn Sie nicht für die Fertigstellung warten Sie.

Sie müssen auch Themen berücksichtigen. Wenn Sie rufen Sie async_x auf einem Stream mehr Male kann man mit gleichzeitigen Operationen auf dem gleichen zugrunde liegenden Stream in verschiedenen Threads enden, zu undefiniertem Verhalten führen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top