LPFN_RIODEQUEUECOMPLETION回呼函式 (mswsock.h)

RIODequeueCompletion 函式會從 I/O 完成佇列中移除專案,以搭配 Winsock 已註冊的 I/O 延伸模組使用。

語法

LPFN_RIODEQUEUECOMPLETION LpfnRiodequeuecompletion;

ULONG LpfnRiodequeuecompletion(
  RIO_CQ CQ,
  PRIORESULT Array,
  ULONG ArraySize
)
{...}

參數

CQ

識別 I/O 完成佇列的描述項。

Array

要接收排入佇列完成描述的 RIORESULT 結構陣列。

ArraySize

陣列中要寫入的項目數上限。

傳回值

如果沒有發生錯誤, RIODequeueCompletion 函式 會傳回從指定完成佇列中移除的完成項目數目。 否則,會傳回RIO_CORRUPT_CQ值,表示 CQ 參數中傳遞之RIO_CQ的狀態已損毀,因為記憶體損毀或誤用RIO 函式。

備註

RIODequeueCompletion 函式會從 I/O 完成佇列中移除專案,以傳送和接收具有 Winsock 已註冊 I/O 延伸模組的要求。

RIODequeueCompletion 函式是應用程式可以瞭解已完成的傳送和接收要求的機制。 當完成佇列不是空的時,應用程式通常會在接收通知之後呼叫RIODequeueCompletion 函式。 建立 RIO_CQ 時,會設定 I/O 完成佇列的通知行為。 決定建立RIO_CQ時,通知行為的RIO_NOTIFICATION_COMPLETION結構會傳遞至RIOCreateCompletionQueue 函式。

RIODequeueCompletion 函式完成時, Array 參數會針對已完成的傳送和接收已取消佇列的要求,包含 RIORESULT 結構的指標數位。 傳回的 RIORESULT 結構成員會提供已完成要求完成狀態的資訊,以及已傳輸的位元元組數目。 每個傳回的 RIORESULT 結構也包含套接字內容和可用來識別特定已完成要求的應用程式內容。

如果 CQ 參數中傳遞的 I/O 完成佇列無效或損毀, 則RIODequeueCompletion 函式會傳回 RIO_CORRUPT_CQ計數。

如果尚未完成傳送或接收要取消佇列的要求, 則RIODequeueCompletion 函式會傳回零的值。

只有在要求完成之後,系統才會釋放與其緩衝區和緩衝區註冊的關聯,以及其配額費用。

注意

為了有效率,存取完成佇列 (RIO_CQ 結構) ,並要求佇列 (RIO_RQ 結構) 不受同步處理基本類型保護。 如果您需要從多個線程存取完成或要求佇列,應該以重要區段、精簡讀取器寫入鎖定或類似的機制協調存取。 單一線程存取時不需要此鎖定。 不同的線程可以存取個別的要求/完成佇列,而不需要鎖定。 只有在多個線程嘗試存取相同的佇列時,才會發生同步處理的需求。 如果多個線程在相同的套接字上傳送和接收,因為傳送和接收作業使用套接字的要求佇列,則也需要同步處理。

 

注意

若要在運行時間取得 RIODequeueCompletion 函式的函式指標,您必須呼叫 WSAIoctl 函式並指定 SIO_GET_MULTIPLE_EXTENSION_FUNCTION_POINTER opcode。 傳遞至 WSAIoctl 函式的輸入緩衝區必須包含 WSAID_MULTIPLE_RIO,這是全域唯一標識碼 (GUID) ,其值可識別 Winsock 已註冊的 I/O 延伸模組函式。 成功時, WSAIoctl 函式所傳回的輸出包含 RIO_EXTENSION_FUNCTION_TABLE 結構的指標,其中包含 Winsock 已註冊 I/O 延伸模組函式的指標。 SIO_GET_MULTIPLE_EXTENSION_FUNCTION_POINTER IOCTL 定義於 Ws2def.h 頭檔中。 WSAID_MULTIPLE_RIO GUID 定義於 Mswsock.h 頭檔中。

 

Windows Phone 8:Windows Phone 8 和更新版本 Windows Phone 市集應用程式支援此函式。

Windows 8.1Windows Server 2012 R2:Windows 8.1、Windows Server 2012 R2 和更新版本上的 Windows 市集應用程式支援此函式。

執行緒安全性

如果多個線程嘗試使用RIODequeueCompletion 函式存取相同的RIO_CQ,則必須透過重要區段、精簡讀取器寫入器鎖定或類似的互斥機制來協調存取。 如果未共用完成佇列,則不需要互斥。

規格需求

需求
標頭 mswsock.h