GetOverlappedResult 函式 (ioapiset.h)

擷取指定檔案、命名管道或通訊裝置上重迭作業的結果。 若要在可警示的線程上指定逾時間隔或等候,請使用 GetOverlappedResultEx

語法

BOOL GetOverlappedResult(
  [in]  HANDLE       hFile,
  [in]  LPOVERLAPPED lpOverlapped,
  [out] LPDWORD      lpNumberOfBytesTransferred,
  [in]  BOOL         bWait
);

參數

[in] hFile

檔案、命名管道或通訊裝置的句柄。 這是呼叫下列任一函式時所指定的重疊作業所指定的相同句柄:

[in] lpOverlapped

重疊作業啟動時所指定 之重疊 結構的指標。

[out] lpNumberOfBytesTransferred

變數的指標,接收讀取或寫入作業實際傳輸的位元元組數目。 對於 TransactNamedPipe 作業,這是從管道讀取的位元組數目。 針對 DeviceIoControl 作業,這是設備驅動器所傳回的輸出數據位元組數目。 針對 ConnectNamedPipeWaitCommEvent 作業,此值未定義。

[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

另請參閱

CancelIoCreateEventGetOverlappedResultExOVERLAPPED重疊的輸入和輸出同步處理函式