WinAsyncAPPCIOCP
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。 必須先建立 I/O 完成埠,才能呼叫 WinAsyncAPPCIOCP 函式。 當動詞完成時,APPC 程式庫會呼叫 PostQueuedCompletionStatus 函式,並將結構中的其餘欄位當做輸入,而且這些欄位只會傳遞至應用程式所發出的 GetQueuedCompletionStatus 函式。
APPC_NumberOfBytesTransferred
這個提供的參數會被忽略。 當 APPC 動詞完成時,APPC 程式庫會以此欄位呼叫 PostQueuedCompletionStatus 函式做為輸入,而 針對 dwNumberOfBytesTransferred 傳回的值只會傳遞至應用程式所發出的 GetQueuedCompletionStatus 函式。
APPC_CompletionKey
這個提供的參數會被忽略。 當 APPC 動詞完成時,APPC 程式庫會使用此欄位呼叫 PostQueuedCompletionStatus 函式做為輸入,而 dwCompletionKey 所傳回的值只會傳遞至應用程式所發出的 GetQueuedCompletionStatus 函式。
APPC_pOverlapped
這個提供的參數會被忽略。 當 APPC 動詞完成時,APPC 程式庫會使用這個欄位呼叫 PostQueuedCompletionStatus 函式做為輸入,而 針對 lpOverlapped 傳回的值只會傳遞至應用程式所發出的 GetQueuedCompletionStatus 函式。
傳回值
傳回值會指定非同步解析要求是否成功。 如果函式成功,則傳回值是非同步工作控制碼。 如果函式未成功,則會傳回零。
當此函式以成功的值傳回時,這並不表示 APPC 呼叫最終會成功傳回。 它只會指出 APPC 程式庫可以使用 I/O 完成埠以非同步方式嘗試 APPC 呼叫以通知。
備註
此函式適用于 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 函式收到通知。 完成 I/O 時,請檢查動詞控制區塊中是否有任何錯誤狀況的 APPC 主要傳回碼和次要傳回碼。