次の方法で共有


クライアント側の非同期パイプ処理

非同期リモート呼び出しを行う前に、クライアントはまず非同期ハンドルを初期化する必要があります。 パイプ以外のプロシージャと同様に、クライアントは非同期ハンドルを最初のパラメーターとして非同期関数を呼び出し、非同期ハンドルを使用してパイプ データの送受信、呼び出しの状態の照会、応答の受信を行います。

クライアントは、非同期ハンドルを最初のパラメーターとして使用して、非同期リモート プロシージャ呼び出しを行います。 クライアントはこのハンドルを使用して、呼び出しの状態を照会し、応答を受信できます。 非同期パイプ モデルは対称です。 クライアント アプリケーションとサーバー アプリケーションの両方で、パイプ データをアクティブに送受信します (パイプ データがパッシブに送受信される同期 RPC とは対照的)。

クライアントは、適切な非同期パイプで プッシュ 関数を呼び出し、パイプの状態変数を最初のパラメーターとして使用して、非同期パイプ データを送信します。 プッシュ 関数が返されると、クライアントは送信バッファーを変更または解放できます。

非同期ハンドルでRPC_ASYNC_NOTIFY_ON_SEND_COMPLETE フラグが設定されていて、通知メカニズムとして APC が使用されている場合、パイプ送信が実際に完了したときに APC がキューに入れられます。 このメカニズムを利用してフロー制御を実装できます。 ただし、前のプッシュが完了する前にクライアントが別のバッファーをプッシュした場合、クライアントは転送操作の速度に応じて、各バッファーまたは各 プッシュ 操作に対して 1 つの通知ではなく、1 つの送信完了通知のみを受信する場合があることに注意してください。 クライアントは、すべてのパイプ データを送信すると、要素の数が 0 に設定された最後の プッシュ 呼び出しを行います。

クライアント プログラムは、適切な非同期パイプで プル 関数を呼び出し、パイプの状態変数を最初のパラメーターとして使用して、非同期パイプ データを受け取ります。 使用できるパイプ データがない場合、pull 関数はRPC_S_ASYNC_CALL_PENDINGを返します。

通知メカニズムがAPCの場合、サーバーがRPC_S_ASYNC_CALL_PENDINGを返したときは、クライアントは実行時からのAPCであるRpcReceiveCompleteを受信するまで待機し、その後でpullを再度呼び出す必要があります。