ich nicht über diese klar habe ich irgendwo gelesen, dass GetQueuedCompletionStatus
WSARecv
und WSASend
Ergebnisse in der Reihenfolge angezeigt werden sie erstellt wurden, ist so hier meine Frage:
In einem Server initialisiert Wenn CreateIoCompletionPort
mit NumberOfConcurrentThreads = 1
dann Öffnen Sie eine Verbindung mit einem Client und der Server ruft zuerst WSARecv
dann WSASend
, aber der Client sendet nie etwas. Auf dem Server wird GetQueuedCompletionStatus
nie das Ergebnis von WSASend
zurückgeben, weil ein Ergebnis von WSARecv
zuerst passieren muss?Verständnis IO Completion Ports
0
A
Antwort
1
Wenn der IO-Vorgang abgeschlossen ist (mit Erfolg oder anfänglich zurück anstehend) auf Datei mit gebundenem IOCP - Paket in Warteschlange an IOCP - und GetQueuedCompletionStatus hat dieses Paket erhalten. Wenn Sie also 2 io-Vorgänge starten - zuerst WSARecv und WSASend und WSASend -, wird GetQueuedCompletionStatus zuerst mit dem Status WSASend zurückgegeben, auch wenn WSARecv nicht abgeschlossen wird. so GetQueuedCompletionStatus nur nach einigen IO-Operation abgeschlossen in der Datei mit dieser IOCP
in welcher Frage überhaupt und wie IOCP hier verwandt? Sie müssen WSASend erst nach Abschluss von WSARecv aufrufen? oder wie/welche Logik? – RbMm
* Ich habe irgendwo gelesen, dass GetQueuedCompletionStatus WSARecv- und WSASend-Ergebnisse in der Reihenfolge zurückgibt, in der sie erstellt wurden * - nein. Die Ergebnisse werden in der Reihenfolge zurückgegeben, in der die E/A abgeschlossen sind. –
Ich stimme ab, diese Frage als Off-Topic zu schließen, weil sie auf einer falschen Annahme beruht. –