共用方式為


GetQueuedCompletionStatusEx 函式

同時擷取多個完成埠專案。 它等待與指定完成埠關聯的待處理 I/O作完成。

要一次取消一個 I/O 完成數據包的排隊,請使用 GetQueuedCompletionStatus 函數。

語法

BOOL WINAPI GetQueuedCompletionStatusEx(
  _In_  HANDLE             CompletionPort,
  _Out_ LPOVERLAPPED_ENTRY lpCompletionPortEntries,
  _In_  ULONG              ulCount,
  _Out_ PULONG             ulNumEntriesRemoved,
  _In_  DWORD              dwMilliseconds,
  _In_  BOOL               fAlertable
);

參數

完成埠[in]

完成埠的句柄。 要創建完成埠,請使用 CreateIoCompletionPort 函數。

lpCompletionPort條目[out]

在輸入時,指向預先分配的 OVERLAPPED_ENTRY 結構陣列。

在輸出時,接收保存條目的 OVERLAPPED_ENTRY 結構體的陣列。 陣列元素的數量由 ulNumEntriesRemoved 提供。

每個 I/O 期間傳輸的位元元組數、指示每個 I/O 發生在哪個檔的完成鍵以及每個原始 I/O 中使用的重疊結構位址都在 lpCompletionPortEntries 陣列中返回。

ulCount[in]

要刪除的最大條目數。

ulNumEntriesRemoved[out]

指向變數的指標,該變數接收實際刪除的條目數。

dw毫秒[in]

調用方願意等待完成數據包出現在完成埠的毫秒數。 如果指定時間內沒有出現完成資料包,則函數超時並傳回 FALSE

如果 dwMillisecondsINFINITE0xFFFFFFFF),則函數永遠不會超時。如果 dwMilliseconds 為零,並且沒有要取消排隊的 I/O作,則函數將立即超時。

Windows XP、Windows Server 2003、Windows Vista、Windows 7、Windows Server 2008 和 Windows Server 2008 R2:dwMilliseconds 值包括在低功耗狀態下花費的時間。 例如,當計算機處於睡眠狀態時,超時確實會一直倒計時。

Windows 8、Windows Server 2012、Windows 8.1、Windows Server 2012 R2、Windows 10 和 Windows Server 2016:dwMilliseconds 值不包括在低功耗狀態下花費的時間。 例如,當計算機處於休眠狀態時,超時不會一直倒計時。

f可警報[in]

如果此參數為 FALSE,則函數在超時期限已過或檢索到條目之前不會返回。

如果參數為 TRUE 且沒有可用條目,則函數將執行可警報的等待。 當系統將 I/O 完成例程或 APC 排隊到線程並且線程執行該函數時,線程將返回。

當指定完成例程的 ReadFileExWriteFileEx 函數完成時,完成例程將排隊,調用線程是啟動該作的線程。 當您調用 QueueUserAPC 時,APC 將排隊。

返回值

如果成功,則返回非零 TRUE ,否則返回零 FALSE

若要取得擴充的錯誤資訊,請呼叫 GetLastError

備註

此函數將線程與指定的完成埠相關聯。 一個線程最多可以與一個完成埠相關聯。

當至少完成一個掛起的 I/O 時,此函數將返回 TRUE ,但一個或多個 I/O作可能會失敗。 請注意,此函數的使用者負責檢查 lpCompletionPortEntries 參數中返回的條目清單,通過查看每個 OVERLAPPED_ENTRY 中 lpOverlapped 成員中包含的狀態,確定其中哪些條目對應於任何可能的失敗 I/O作。

此函數在沒有 I/O作取消排隊時返回 FALSE 。 這通常意味著在處理此調用的參數時發生錯誤,或者 CompletionPort 句柄已關閉或無效。 GetLastError 函數提供擴展的錯誤資訊。

如果對 GetQueuedCompletionStatusEx 的調用因與其關聯的句柄已關閉而失敗,則函數將返回 FALSEGetLastErrorERROR_ABANDONED_WAIT_0

伺服器應用程式可能有多個線程為同一完成埠調用 GetQueuedCompletionStatusEx 函數。 當 I/O作完成時,它們將按先進先出的順序排隊到此埠。 如果線程正在主動等待此調用,則一個或多個排隊請求僅完成對該線程的調用。

有關 I/O 完成埠理論、用法和相關函數的更多資訊,請參閱 I/O 完成埠

在 Windows 8 和 Windows Server 2012 中,下列技術支援此功能。

科技 支持
伺服器消息塊 (SMB) 3.0 通訊協定 是的
SMB 3.0 透明故障轉移 (TFO) 是的
具有向外延展檔案共用的SMB 3.0(SO) 是的
叢集共用磁碟區檔案系統 (CsvFS) 是的
彈性檔案系統 (ReFS) 是的

需求

要求 價值觀
最低支援的用戶端 Windows Vista [傳統型應用程式 |UWP 應用程式]
最低支援的伺服器 Windows Server 2008 [傳統型應用程式 |UWP 應用程式]
頁首 IoAPI.h (包括 Windows.h
WinBase.h 在 Windows Server 2008 R2、Windows 7、Windows Server 2008 和 Windows Vista(包括 Windows.h) 上
圖書館 Kernel32.lib
DLL Kernel32.dll

另請參閱

概述主題

檔案管理功能

I/O 完成端口

使用 Windows 標頭

函數

ConnectNamedPipe 連接

CreateIoCompletionPort

DeviceIoControl 設備

鎖定檔Ex

讀取檔

PostQueuedCompletionStatus

TransactNamed管道

WaitCommEvent 事件

寫入檔案