OVERLAPPED 結構在 Win7 上對 ReadFile 的影響

原本的程式是將 OVERLAPPED 結構宣告為 global variable,然後在初始化時 CreateEvent 並將 manual-reset 這個參數設為 FALSE。而在 ReadFile 回傳 FALSE 時,透過 GetOverlappedResult 的 bWait 設為 TRUE 來等待 I/O 結束,並自動將 event 設為 non-signaled 狀態。


可是這樣的方式,在 Win7 上 ReadFile 一直都會傳 TRUE,並且 GetLastError 的結果是 I/O pending。這令我很困擾。


後來將 OVERLAPPED 結構改成在進入 function 時才 CreateEvent,並且離開時做 CloseHandle,這樣 ReadFile 就正常了(會傳 TRUE,GetLastError 為 ERROR_SUCCESS)。


留言

熱門文章