GetOverlappedResult 函式 (ioapiset.h)
擷取指定檔案、命名管道或通訊裝置上重迭作業的結果。 若要在可警示的線程上指定逾時間隔或等候,請使用 GetOverlappedResultEx。
語法
BOOL GetOverlappedResult(
[in] HANDLE hFile,
[in] LPOVERLAPPED lpOverlapped,
[out] LPDWORD lpNumberOfBytesTransferred,
[in] BOOL bWait
);
參數
[in] hFile
檔案、命名管道或通訊裝置的句柄。 這是呼叫下列任一函式時所指定的重疊作業所指定的相同句柄:
- ReadFile
- WriteFile
- ConnectNamedPipe
- TransactNamedPipe
- DeviceIoControl
- WaitCommEvent
- ReadDirectoryChangesW
- LockFileEx
[in] lpOverlapped
重疊作業啟動時所指定 之重疊 結構的指標。
[out] lpNumberOfBytesTransferred
變數的指標,接收讀取或寫入作業實際傳輸的位元元組數目。 對於 TransactNamedPipe 作業,這是從管道讀取的位元組數目。 針對 DeviceIoControl 作業,這是設備驅動器所傳回的輸出數據位元組數目。 針對 ConnectNamedPipe 或 WaitCommEvent 作業,此值未定義。
[in] bWait
如果此參數為 TRUE,且 lpOverlapped 結構的 Internal 成員STATUS_PENDING,則函式不會傳回,直到作業完成為止。 如果此參數為 FALSE 且作業仍在擱置中,則函式會傳回 FALSE ,而 GetLastError 函式會傳回 ERROR_IO_INCOMPLETE。
傳回值
如果函式成功,則傳回非零的值。
如果此函式失敗,則傳回值為零。 若要取得擴充的錯誤資訊,請呼叫 GetLastError。
備註
GetOverlappedResult 函式所報告的結果,是指定句柄的最後一個重迭作業,其中提供指定的 OVERLAPPED 結構,以及作業的結果擱置中。 啟動作業的函式傳回 FALSE 時,會指出暫止作業,而 GetLastError 函式會傳回 ERROR_IO_PENDING。 當 I/O 作業擱置時,啟動作業的函式會將重疊結構的 hEvent 成員重設為非簽署狀態。 然後,當擱置作業完成時,系統會將事件物件設定為已發出訊號的狀態。
如果 bWait 參數為 TRUE,GetOverlappedResult 會等候事件對象處於訊號狀態,判斷是否已完成擱置的作業。
如果 OVERLAPPED 結構的 hEvent 成員為 NULL,系統會使用 hFile 句柄的狀態,在作業完成時發出訊號。 不建議針對此目的使用檔案、命名管道或通訊裝置句柄。 使用事件對象比較安全,因為在同一個檔案、命名管道或通訊裝置上執行多個同時重疊作業時可能發生的混淆。 在此情況下,無法得知哪個作業導致物件的狀態發出訊號。
範例
如需使用 GetOverlappedResult 的範例,請參閱 測試檔案結尾
規格需求
最低支援的用戶端 | Windows XP [傳統型應用程式 |UWP 應用程式] |
最低支援的伺服器 | Windows Server 2003 [傳統型應用程式 |UWP 應用程式] |
目標平台 | Windows |
標頭 | ioapiset.h (Windows Server 2003、Windows Vista、Windows 7、Windows Server 2008 Windows Server 2008 R2) |
程式庫 | Kernel32.lib |
DLL | Kernel32.dll |
另請參閱
CancelIo、 CreateEvent、 GetOverlappedResultEx、 OVERLAPPED、 重疊的輸入和輸出、 同步處理函式