LPFN_RIORESIZECOMPLETIONQUEUE回呼函式 (mswsock.h)
RIOResizeCompletionQueue 函式會將 I/O 完成佇列的大小調整為較大或較小,以便與 Winsock 已註冊的 I/O 延伸模組搭配使用。
語法
LPFN_RIORESIZECOMPLETIONQUEUE LpfnRioresizecompletionqueue;
BOOL LpfnRioresizecompletionqueue(
RIO_CQ CQ,
DWORD QueueSize
)
{...}
參數
CQ
描述項,可識別要重設大小的現有 I/O 完成佇列。
QueueSize
傳回值
如果沒有發生錯誤, 則RIOResizeCompletionQueue 函式會傳回 TRUE。 否則會傳回 FALSE 值,而且可以藉由呼叫 WSAGetLastError 函式來擷取特定的錯誤碼。
傳回碼 | Description |
---|---|
系統在嘗試在呼叫中使用指標自變數時偵測到無效的指標位址。 如果 CQ 參數中指定的完成佇列包含無效的指標,就會傳回此錯誤。 |
|
無效的參數已傳遞至 函式。 如果 CQ 參數無效, (RIO_INVALID_CQ 傳回此錯誤,例如) 。 如果 QueueSize 參數中指定的佇列大小大於 RIO_CQ_MAX_SIZE,也會傳回此錯誤。 |
|
無法配置足夠的記憶體。 如果無法為 QueueSize 參數中指定的佇列配置記憶體,就會傳回此錯誤。 |
|
仍然參考 I/O 完成佇列的作業太多。 目前無法調整此 I/O 完成佇列的大小, |
RIOResizeCompletionQueue 函式會將 I/O 完成佇列的大小調整為較大或較小。 如果 I/O 完成佇列已經包含完成,這些完成將會複製到新的完成佇列。
I/O 完成佇列的大小下限,取決於與完成佇列相關聯的要求佇列數目,以及要求佇列上的傳送和接收數目。 如果應用程式呼叫 RIOResizeCompletionQueue 函式,並嘗試為 I/O 完成佇列中的現有完成數目設定太小的佇列,則呼叫將會失敗,且佇列不會重設大小。
注意
必須在運行時間取得RIOResizeCompletionQueue 函式的函式指標,方法是呼叫具有指定之 SIO_GET_MULTIPLE_EXTENSION_FUNCTION_POINTER opcode 的 WSAIoctl 函式。 傳遞至 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 Store 應用程式支援此函式。
Windows 8.1和 Windows Server 2012 R2:Windows 8.1、Windows Server 2012 R2 和更新版本上的 Windows 市集應用程式支援此函式。
執行緒安全性
如果多個線程嘗試使用RIODequeueCompletion 或RIOResizeCompletionQueue 函式來存取相同的RIO_CQ,則必須透過重要區段、精簡讀取器寫入器鎖定或類似的相互排除機制來協調存取。 如果未共用完成佇列,則不需要互斥。
規格需求
需求 | 值 |
---|---|
標頭 | mswsock.h |