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에서 특정 오류 코드를 사용할 수 있습니다.
오류 코드 | 의미 |
---|---|
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 |