次の方法で共有


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

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

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

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

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

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

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