getOverlappedResultEx 函式 (ioapiset.h)
擷取指定時間間隔內指定檔案、命名管道或通訊裝置上重迭作業的結果。 呼叫線程可以執行可警示的等候。
語法
BOOL GetOverlappedResultEx(
[in] HANDLE hFile,
[in] LPOVERLAPPED lpOverlapped,
[out] LPDWORD lpNumberOfBytesTransferred,
[in] DWORD dwMilliseconds,
[in] BOOL bAlertable
);
參數
[in] hFile
檔案、命名管道或通訊裝置的句柄。 這是呼叫 ReadFile、 WriteFile、 ConnectNamedPipe、 TransactNamedPipe、 DeviceIoControl 或 WaitCommEvent 函式時所指定的相同句柄。
[in] lpOverlapped
重疊作業啟動時所指定 之重疊 結構的指標。
[out] lpNumberOfBytesTransferred
變數的指標,接收讀取或寫入作業實際傳輸的位元元組數目。 對於 TransactNamedPipe 作業,這是從管道讀取的位元組數目。 對於 DeviceIoControl 作業,這是設備驅動器所傳回輸出數據的位元組數目。 若為 ConnectNamedPipe 或 WaitCommEvent 作業,此值為未定義。
[in] dwMilliseconds
超時時間間隔,以毫秒為單位。
如果 dwMilliseconds 為零,且作業仍在進行中,則函式會立即傳回,而 GetLastError 函式會 傳回ERROR_IO_INCOMPLETE。
如果 dwMilliseconds 為非零值,且作業仍在進行中,函式會等到發出訊號的物件、已排入佇列的 I/O 完成例程或 APC,或傳回之前經過的間隔。 使用 GetLastError 取得擴充的錯誤資訊。
如果 dwMilliseconds 是 INFINITE,則只有在發出訊號或 I/O 完成例程或 APC 排入佇列時,函式才會傳回 。
dwMilliseconds 值不包含花費在低電量狀態的時間。 例如,當計算機進入睡眠狀態時,逾時不會繼續倒數。
[in] bAlertable
如果此參數為 TRUE ,且呼叫線程處於等候狀態,則當系統將 I/O 完成例程或 APC 排入佇列時,函式會傳回。 呼叫線程接著會執行例程或函式。 否則,函式不會傳回,而且不會執行完成例程或APC函式。
完成例程會在指定的 ReadFileEx 或 WriteFileEx 函式完成時排入佇列。 只有當 bAlertable 為 TRUE,而且呼叫線程是起始讀取或寫入作業的線程時,函式才會傳回和完成例程。 當您呼叫 QueueUserAPC 時,APC 會排入佇列。
傳回值
如果函式成功,則傳回非零的值。
如果此函式失敗,則傳回值為零。 若要取得擴充的錯誤資訊,請呼叫 GetLastError。 常見的錯誤碼包括下列各項:
- 如果 dwMilliseconds 為零,而且作業仍在進行中, GetLastError 會傳回 ERROR_IO_INCOMPLETE。
- 如果 dwMilliseconds 為非零值,且 I/O 完成例程或 APC 已排入佇列, GetLastError 會 傳回WAIT_IO_COMPLETION。
- 如果 dwMilliseconds 為非零值,且指定的逾時間隔經過, GetLastError 會 傳回WAIT_TIMEOUT。
備註
GetOverlappedResultEx 函式與 GetOverlappedResult 不同:dwMilliseconds 參數可以指定作業的逾時間隔,而 bAlertable 參數可以指定呼叫線程應該執行可警示的等候。
GetOverlappedResultEx 函式所報告的結果,是所指定句柄最後一個重迭作業的結果,其中提供指定的 OVERLAPPED 結構,以及作業的結果擱置中。 當啟動作業的函式傳回 FALSE,而 GetLastError 函 式傳回 ERROR_IO_PENDING時,就會指出暫止作業。 當 I/O 作業擱置時,啟動作業的函式會將 OVERLAPPED 結構的 hEvent 成員重設為非簽署狀態。 然後,當擱置作業完成時,系統會將事件物件設定為已發出訊號的狀態。
在 OVERLAPPED 結構中指定手動重設事件物件。 如果使用自動重設事件物件,在啟動重疊作業與 呼叫 GetOverlappedResultEx 之間的間隔內,不得在任何其他等候作業中指定事件句柄。 例如,事件物件有時會在其中一個等候函式中指定,以等候作業完成。 等候函式傳回時,系統會將自動重設事件的狀態設定為非ignaled,而後續呼叫 GetOverlappedResultEx 並將 dwMilliseconds 參數設為 INFINITE 會導致無限期地封鎖函式。
如果 OVERLAPPED 結構的 hEvent 成員為 NULL,系統會使用 hFile 句柄的狀態,在作業完成時發出訊號。 不建議針對此目的使用檔案、命名管道或通訊裝置句柄。 由於在相同檔案、命名管道或通訊裝置上執行多個同時重疊的作業時,可能會發生混淆,因此使用事件物件會更安全。 在此情況下,無法得知哪個作業導致物件的狀態收到訊號。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 8 [傳統型應用程式 |UWP 應用程式] |
最低支援的伺服器 | Windows Server 2012 [傳統型應用程式 |UWP 應用程式] |
目標平台 | Windows |
標頭 | ioapiset.h (包含 Windows.h) |
程式庫 | Kernel32.lib |
DLL | Kernel32.dll |