다음을 통해 공유


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

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

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

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

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

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

알림 메커니즘이 APC이고 서버에서 RPC_S_ASYNC_CALL_PENDING을 반환한 경우, 클라이언트는 런타임에서 RpcReceiveComplete APC를 받을 때까지 기다린 후, 다시 pull을 호출해야 합니다.