WinAsyncAPPCIOCP 函式為所有 APPC 動詞提供非同步入口點。 使用此函式取代阻擋版本的動詞,允許在同一執行緒中透過 I/O 完成埠處理多個會話。 此動詞僅支援 Microsoft Windows,並使用 Win32 I/O 完成埠。
語法
HANDLE WINAPI WinAsyncAPPCIOCP(
APPC_IOCP_INFO *iocp_handle,
longlpVcb);
參數
iocp_handle
一個指向用於傳遞 I/O 完成埠資訊的 APPC_IOCP_INFO 結構的指標。
lpVcb
指向動詞控制區塊的指標
APPC_IOCP_INFO結構的原型如下:
APPC_CompletionPort;APPC_NumberOfBytesTransferred;
APPC_CompletionKey;
APPC_pOverlapped;
APPC_CompletionPort
這個提供的參數是當建立 I/O 完成埠時,呼叫 CreateIoCompletionPort 函式所回傳的 HANDLE 值。 在呼叫 WinAsyncAPPCIOCP 函式之前,必須先建立 I/O 完成埠。 當動詞完成時,APPC 函式庫會呼叫 PostQueuedCompletionStatus 函式,結構中剩餘欄位作為輸入,這些欄位會直接傳遞給應用程式發出的 GetQueuedCompletionStatus 函式。
APPC_NumberOfBytesTransferred
此參數被忽略。 當 APPC 動詞完成時,APPC 函式庫會以此欄位呼叫 PostQueuedCompletionStatus 函式,而 dwNumberOfBytesTransfer 的回傳值會直接傳遞給應用程式發出的 GetQueuedCompletionStatus 函式。
APPC_CompletionKey
此參數被忽略。 當 APPC 動詞完成時,APPC 函式庫會呼叫 PostQueuedCompletionStatus 函式,並以此欄位作為輸入, dwCompletionKey 回傳的值會直接傳遞給應用程式發出的 GetQueuedCompletionStatus 函式。
APPC_pOverlapped
此參數被忽略。 當 APPC 動詞完成時,APPC 函式庫會以此欄位呼叫 PostQueuedCompletionStatus 函式,而 lpOverlapped 回傳的值會直接傳遞給應用程式所發出的 GetQueuedCompletionStatus 函式。
傳回值
回傳值則指定非同步解析請求是否成功。 若函式成功,回傳值為非同步任務句柄。 若函數未成功,則回傳為零。
當此函式回傳成功值時,並不代表 APPC 呼叫最終會成功返回。 它僅表示 APPC 函式庫可透過 I/O 完成埠非同步嘗試呼叫通知。
備註
此函式設計用於 Win32 API 中的 CreateIoCompletionPort 與 GetQueuedCompletionStatus 。 這些功能在 Microsoft Platform SDK 文件的「參考」部分有描述。
關於如何在多執行緒 TP 中使用此動詞的範例,請參考多執行緒接收範例 TP(位於 SNA\MSENDRCV 資料夾中的 MRCVIO),使用主機整合伺服器 SDK 中包含的 I/O 完成埠。
在基本對話中能阻擋的 APPC 動詞如下:
-
用於映射對話且能阻擋的 APPC 動詞如下:
-
使用動詞的同步或非同步版本時,應用程式一次只能在對話中處理一個未完成的功能。 嘗試啟動第二個功能時會出現錯誤代碼AP_CONV_BUSY。
前段的例外包括 RECEIVE_AND_POST、 MC_RECEIVE_AND_POST、 RECEIVE_AND_WAIT和 MC_RECEIVE_AND_WAIT。
為了充分利用非同步支援,非同步發出的 RECEIVE_AND_WAIT 與 MC_RECEIVE_AND_WAIT 動詞被修改為與 RECEIVE_AND_POST 及 MC_RECEIVE_AND_POST 動詞相似。 具體來說,雖然其中一個動詞的非同步版本是優異的,但以下動詞可在同一對話中出現:
DEALLOCATE (AP_ABEND_PROG、AP_ABEND_SVC或AP_ABEND_TIMER)
-
這使得應用程式,特別是伺服器應用程式,能夠使用非同步 RECEIVE_AND_WAIT 或 MC_RECEIVE_AND_WAIT 來接收資料。 雖然 RECEIVE_AND_POST、 MC_RECEIVE_AND_POST、 RECEIVE_AND_WAIT或 MC_RECEIVE_AND_WAIT 都很優秀,但它仍然可以使用 SEND_ERROR 或 MC_SEND_ERROR ,以及 REQUEST_TO_SEND 或 MC_REQUEST_TO_SEND。 建議您使用此功能以提供完整的非同步支援,特別是同一執行緒中多次對話的支援。
當非同步操作完成後,應用程式會透過 GetQueuedCompletionStatus 函式收到通知。 輸入輸出完成後,檢查動詞控制區塊中的 APPC 主要回傳碼與次要回傳碼是否有錯誤狀況。