다음을 통해 공유


WPUQueueApc 함수(ws2spi.h)

WPUQueueApc 함수는 겹치는 I/O 완료 루틴을 쉽게 호출하기 위해 지정된 스레드에 대한 사용자 모드-APC(비동기 프로시저 호출)를 큐에 대기합니다.

구문

int WPUQueueApc(
  [in]  LPWSATHREADID lpThreadId,
  [in]  LPWSAUSERAPC  lpfnUserApc,
  [in]  DWORD_PTR     dwContext,
  [out] LPINT         lpErrno
);

매개 변수

[in] lpThreadId

스레드 컨텍스트를 식별하는 WSATHREADID 구조체에 대한 포인터입니다. 이 구조체에 대한 포인터는 Ws2_32.dll 겹치는 작업에 대한 입력 매개 변수로 서비스 공급자에게 제공됩니다. 공급자는 WSATHREADID 구조를 로컬로 저장하고 이 로컬 저장소에 대한 포인터를 제공해야 합니다. WPUQueueApc가 반환되면 WSATHREADID의 로컬 복사본이 더 이상 필요하지 않습니다.

[in] lpfnUserApc

호출할 APC 함수에 대한 포인터입니다.

[in] dwContext

이후에 APC 함수에 입력 매개 변수로 제공되는 32비트 컨텍스트 값입니다.

[out] lpErrno

오류 코드에 대한 포인터입니다.

반환 값

오류가 발생하지 않으면 WPUQueueApc 는 0을 반환하고 지정된 스레드에 대한 완료 루틴을 큐에 대기합니다. 그렇지 않으면 SOCKET_ERROR 반환하고 lpErrno에서 특정 오류 코드를 사용할 수 있습니다.

오류 코드 의미
WSAEFAULT
dwThreadId 매개 변수는 유효한 스레드를 지정하지 않습니다.
 
 

설명

이 함수는 지정된 스레드에 대해 APC 함수를 큐에 대기합니다. Windows에서 이 작업은 APC(사용자 모드-비동기 프로시저 호출)를 사용하여 수행됩니다. APC는 지정된 스레드가 경고 대기에서 차단되고 콜백이 직접 이루어지는 경우에만 실행됩니다. 이 호출은 인터럽트 컨텍스트 내에서 사용하기에 안전합니다.

LPWSAUSERAPC는 다음과 같이 정의됩니다.

typedef void ( CALLBACK FAR * LPWSAUSERAPC )( DWORD dwContext );

APC 메커니즘은 단일 컨텍스트 값만 지원하므로 lpfnUserApc 자체는 더 많은 매개 변수를 포함하는 클라이언트 지정 완료 루틴일 수 없습니다. 대신 서비스 공급자는 제공된 dwContext 값을 사용하여 겹치는 작업에 필요한 결과 정보에 액세스한 다음 클라이언트가 지정한 완료 루틴을 호출하는 자체 APC 함수에 대한 포인터를 제공해야 합니다.

사용자 모드 구성 요소가 겹치는 I/O를 구현하는 서비스 공급자의 경우 APC 메커니즘의 일반적인 사용은 다음과 같습니다.

    - I/O 작업이 완료되면 공급자는 작은 버퍼를 할당하고 클라이언트 제공 완료 프로시저에 대한 포인터와 프로시저에 전달할 매개 변수 값으로 압축합니다. - 버퍼에 대한 포인터를 dwContext 값으로 지정하고 자체 중간 프로시저를 대상 프로시저 lpfnUserApc로 지정하여 APC를 큐에 대기합니다. - 대상 스레드가 결국 경고 대기 상태가 되면 서비스 공급자의 중간 프로시저가 적절한 스레드 컨텍스트에서 호출됩니다. - 중간 프로시저는 매개 변수의 압축을 풀고 버퍼의 할당을 취소하고 클라이언트에서 제공하는 완료 프로시저를 호출합니다.

요구 사항

   
지원되는 최소 클라이언트 Windows 2000 Professional[데스크톱 앱만]
지원되는 최소 서버 Windows 2000 Server[데스크톱 앱만]
대상 플랫폼 Windows
헤더 ws2spi.h

참고 항목

WSATHREADID

LPWSPIoctl

LPWSPRecv

LPWSPRecvFrom

LPWSPSend

LPWSPSendTo