다음을 통해 공유


클라이언트 쪽 비동기 파이프 처리

비동기 원격 호출을 하기 전에 클라이언트는 먼저 비동기 핸들을 초기화해야 합니다. 비파이프 프로시저와 마찬가지로 클라이언트는 비동기 핸들을 사용하여 비동기 함수를 첫 번째 매개 변수로 호출하고 비동기 핸들을 사용하여 파이프 데이터를 보내고 받고, 호출의 상태 쿼리하고, 회신을 받습니다.

클라이언트는 비동기 핸들을 첫 번째 매개 변수로 사용하여 비동기 원격 프로시저 호출을 합니다. 클라이언트는 이 핸들을 사용하여 통화 상태 쿼리하고 회신을 받을 수 있습니다. 비동기 파이프 모델은 대칭입니다. 클라이언트 및 서버 애플리케이션은 파이프 데이터를 적극적으로 보내고 받습니다(파이프 데이터가 수동적으로 전송되고 수신되는 동기 RPC와는 반대).

클라이언트는 파이프의 상태 변수를 첫 번째 매개 변수로 사용하여 적절한 비동기 파이프에서 push 함수를 호출하여 비동기 파이프 데이터를 보냅니다. 푸시 함수가 반환되면 클라이언트는 송신 버퍼를 수정하거나 해제할 수 있습니다.

RPC_ASYNC_NOTIFY_ON_SEND_COMPLETE 플래그가 비동기 핸들에 설정되어 있고 APC가 알림 메커니즘으로 사용되는 경우 파이프 전송이 실제로 완료되면 APC가 큐에 대기합니다. 이 메커니즘을 활용하여 흐름 제어를 구현할 수 있습니다. 그러나 이전 푸시가 완료되기 전에 클라이언트가 다른 버퍼를 푸시하는 경우 클라이언트는 전송 작업의 속도에 따라 각 버퍼 또는 각 푸시 작업에 대해 하나의 알림이 아닌 하나의 송신 완료 알림만 수신할 수 있습니다. 클라이언트가 모든 파이프 데이터를 보내면 요소 수가 0으로 설정된 최종 푸시 호출을 하나 만듭니다.

클라이언트 프로그램은 파이프의 상태 변수를 첫 번째 매개 변수로 사용하여 적절한 비동기 파이프에서 끌어오 기 함수를 호출하여 비동기 파이프 데이터를 받습니다. 사용할 수 있는 파이프 데이터가 없으면 끌어오기 함수는 RPC_S_ASYNC_CALL_PENDING 반환합니다.

알림 메커니즘이 APC이고 서버가 RPC_S_ASYNC_CALL_PENDING 반환된 경우 클라이언트는 끌어오기를 다시 호출하기 전에 런타임에서 RpcReceiveComplete APC를 받을 때까지 기다려야 합니다.