共用方式為


getOverlappedResultEx 函式 (ioapiset.h)

擷取指定時間間隔內指定檔案、命名管道或通訊裝置上重迭作業的結果。 呼叫線程可以執行可警示的等候。

語法

BOOL GetOverlappedResultEx(
  [in]  HANDLE       hFile,
  [in]  LPOVERLAPPED lpOverlapped,
  [out] LPDWORD      lpNumberOfBytesTransferred,
  [in]  DWORD        dwMilliseconds,
  [in]  BOOL         bAlertable
);

參數

[in] hFile

檔案、命名管道或通訊裝置的句柄。 這是呼叫 ReadFileWriteFileConnectNamedPipeTransactNamedPipeDeviceIoControlWaitCommEvent 函式時所指定的相同句柄。

[in] lpOverlapped

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

[out] lpNumberOfBytesTransferred

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

[in] dwMilliseconds

超時時間間隔,以毫秒為單位。

如果 dwMilliseconds 為零,且作業仍在進行中,則函式會立即傳回,而 GetLastError 函式會 傳回ERROR_IO_INCOMPLETE

如果 dwMilliseconds 為非零值,且作業仍在進行中,函式會等到發出訊號的物件、已排入佇列的 I/O 完成例程或 APC,或傳回之前經過的間隔。 使用 GetLastError 取得擴充的錯誤資訊。

如果 dwMillisecondsINFINITE,則只有在發出訊號或 I/O 完成例程或 APC 排入佇列時,函式才會傳回 。

dwMilliseconds 值不包含花費在低電量狀態的時間。 例如,當計算機進入睡眠狀態時,逾時不會繼續倒數。

[in] bAlertable

如果此參數為 TRUE ,且呼叫線程處於等候狀態,則當系統將 I/O 完成例程或 APC 排入佇列時,函式會傳回。 呼叫線程接著會執行例程或函式。 否則,函式不會傳回,而且不會執行完成例程或APC函式。

完成例程會在指定的 ReadFileExWriteFileEx 函式完成時排入佇列。 只有當 bAlertableTRUE,而且呼叫線程是起始讀取或寫入作業的線程時,函式才會傳回和完成例程。 當您呼叫 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

另請參閱

CancelIo

ConnectNamedPipe

CreateEvent

DeviceIoControl

GetLastError

GetOverlappedResult

重疊

重疊的輸入和輸出

ReadFile

同步處理函式

TransactNamedPipe

WaitCommEvent

WriteFile