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 호출이 궁극적으로 성공적으로 반환된다는 것을 의미하지는 않습니다. 이는 APPC 라이브러리가 알림을 위해 I/O 완료 포트를 사용하여 APPC 호출을 비동기적으로 시도할 수 있음을 나타냅니다.
설명
이 함수는 Win32 API에서 CreateIoCompletionPort 및 GetQueuedCompletionStatus 와 함께 사용하기 위한 것입니다. 이러한 함수는 Microsoft Platform SDK 설명서의 "참조" 섹션에 설명되어 있습니다.
다중 스레드 TP에서 이 동사를 사용하는 방법에 대한 예제는 호스트 통합 서버 SDK에 포함된 I/O 완료 포트를 사용하여 다중 스레드 수신 샘플 TP(SNA\MSENDRCV 폴더에 있는 MRCVIO)를 참조하세요.
차단할 수 있는 기본 대화에 사용되는 APPC 동사는 다음과 같습니다.
-
차단할 수 있는 매핑된 대화에 사용되는 APPC 동사는 다음과 같습니다.
-
동사의 동기 또는 비동기 버전을 사용하는 경우 애플리케이션은 대화에서 한 번에 하나의 미해결 함수만 진행할 수 있습니다. 두 번째 함수를 시작하려고 하면 오류 코드가 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 동사처럼 작동하도록 변경되었습니다. 특히 이러한 동사 중 하나의 비동기 버전이 미해결 상태이지만 동일한 대화에서 다음 동사를 실행할 수 있습니다.
DEALLOCATE (AP_ABEND_PROG, AP_ABEND_SVC 또는 AP_ABEND_TIMER)
-
따라서 애플리케이션, 특히 서버 애플리케이션은 비동기 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 기본 반환 코드 및 보조 반환 코드를 검사하여 오류 조건을 확인합니다.