我目前正在使用IO完成端口基於命名管道的IPC機制。何時發送IO完成端口數據包,何時不完成?
不幸的是,我有一些msdn文檔的麻煩,因爲我很不清楚在哪些情況下調用ReadFile/WriteFile導致完成數據包。
用ERROR_IO_PENDING返回FALSE的情況很明顯,但是當返回ERROR_MORE_DATA時顯然可能出現這種情況呢?在這種情況下是否會有完成數據包?而且,如果返回其他錯誤呢? 在哪些情況下我必須直接處理結果和釋放資源,而不是在完成處理程序中?
另一種情況是,如果ReadFile/WriteFile甚至成功,這顯然也是可能的。 MSDN是幸運的是瞭解這個here很清楚:
此外,WriteFile函數有時會返回TRUE與ERROR_SUCCESS的GetLastError函數值,即使它是使用異步手柄(也可返回FALSE與ERROR_IO_PENDING)。 ...在這個例子中,建議是允許完成端口例程全權負責這些資源的所有釋放操作。
這是建議在所有情況下是正確的,並且ReadFile的/ WriteFile的工作分配給完成端口句柄的結果可以(也應該)實際上被完全忽略,因爲數據包被髮送到端口反正?