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 関数を呼び出し、 dwNumberOfBytesTransferred に返される値は、アプリケーションによって発行 された GetQueuedCompletionStatus 関数に渡されます。
APPC_CompletionKey
この指定されたパラメーターは無視されます。 APPC 動詞が完了すると、APPC ライブラリはこのフィールドを入力として PostQueuedCompletionStatus 関数を呼び出し、 dwCompletionKey に返される値は、アプリケーションによって発行 された GetQueuedCompletionStatus 関数に渡されます。
APPC_pOverlapped
この指定されたパラメーターは無視されます。 APPC 動詞が完了すると、APPC ライブラリはこのフィールドを入力として PostQueuedCompletionStatus 関数を呼び出し、 lpOverlapped に返される値は、アプリケーションによって発行 された GetQueuedCompletionStatus 関数に渡されます。
戻り値
戻り値は、非同期解決要求が成功したかどうかを指定します。 関数が成功した場合、戻り値は非同期タスク ハンドルです。 関数が成功しなかった場合は、0 が返されます。
この関数が正常な値でを返す場合、これは APPC 呼び出しが最終的に正常に返されることを示すものではありません。 通知用の I/O 完了ポートを使用して、APPC ライブラリが APPC 呼び出しを非同期的に試行できたことを示すだけです。
注釈
この関数は、Win32 API の CreateIoCompletionPort と GetQueuedCompletionStatus で使用することを目的としています。 これらの関数については、Microsoft Platform SDK ドキュメントの「リファレンス」セクションで説明されています。
マルチスレッド TP でこの動詞を使用する方法の例については、Host Integration Server SDK に含まれる I/O 入力候補ポートを使用したマルチスレッド受信サンプル TP (SNA\MSENDRCV フォルダーにある MRCVIO) を参照してください。
ブロックできる基本的な会話で使用される APPC 動詞は次のとおりです。
-
ブロックできるマップされた会話で使用される APPC 動詞は次のとおりです。
-
動詞の同期バージョンまたは非同期バージョンを使用する場合、アプリケーションは一度に 1 つの会話で進行中の未処理の関数を 1 つだけ持つことができます。 2 つ目の関数を開始しようとすると、エラー コードが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 動詞のように動作するように変更されています。 具体的には、これらの動詞の 1 つの非同期バージョンは未処理ですが、同じ会話で次の動詞を発行できます。
DEALLOCATE (AP_ABEND_PROG、AP_ABEND_SVC、またはAP_ABEND_TIMER)
TEST_RTS または MC_TEST_RTS
-
これにより、アプリケーション (特にサーバー アプリケーション) で非同期 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 プライマリリターンコードとセカンダリリターンコードを調べます。