Función WPUQueueApc (ws2spi.h)
La función WPUQueueApc pone en cola una llamada de procedimiento asincrónico en modo de usuario (APC) al subproceso especificado para facilitar la invocación de rutinas de finalización de E/S superpuestas.
Sintaxis
int WPUQueueApc(
[in] LPWSATHREADID lpThreadId,
[in] LPWSAUSERAPC lpfnUserApc,
[in] DWORD_PTR dwContext,
[out] LPINT lpErrno
);
Parámetros
[in] lpThreadId
Puntero a una estructura WSATHREADID que identifica el contexto del subproceso. El Ws2_32.dll proporciona un puntero a esta estructura al proveedor de servicios como parámetro de entrada para una operación superpuesta. El proveedor debe almacenar la estructura WSATHREADID localmente y proporcionar un puntero a este almacén local. La copia local de WSATHREADID ya no es necesaria una vez que WPUQueueApc devuelve.
[in] lpfnUserApc
Puntero a la función de APC que se va a llamar.
[in] dwContext
Valor de contexto de 32 bits que se proporciona posteriormente como parámetro de entrada a la función de APC.
[out] lpErrno
Puntero al código de error.
Valor devuelto
Si no se produce ningún error, WPUQueueApc devuelve cero y pone en cola la rutina de finalización del subproceso especificado. De lo contrario, devuelve SOCKET_ERROR y hay disponible un código de error específico en lpErrno.
Código de error | Significado |
---|---|
El parámetro dwThreadId no especifica un subproceso válido. |
Observaciones
Esta función pone en cola una función de APC en el subproceso especificado. En Windows, esto se realizará mediante una llamada de procedimiento asincrónico en modo de usuario (APC). El APC solo se ejecutará cuando el subproceso especificado se bloquee en una espera de alerta y se realizará directamente una devolución de llamada. Esta llamada es segura para su uso en un contexto de interrupción.
LPWSAUSERAPC se define de la siguiente manera:
typedef void ( CALLBACK FAR * LPWSAUSERAPC )( DWORD dwContext );
Dado que el mecanismo de APC solo admite un valor de contexto único, lpfnUserApc no puede ser la rutina de finalización especificada por el cliente, lo que implica más parámetros. En su lugar, el proveedor de servicios debe proporcionar un puntero a su propia función de APC que usa el valor dwContext proporcionado para tener acceso a la información de resultado necesaria para la operación superpuesta y, a continuación, invoca la rutina de finalización especificada por el cliente.
En el caso de los proveedores de servicios en los que un componente en modo de usuario implementa E/S superpuesta, un uso típico del mecanismo de APC es el siguiente.
-
- Cuando se completa la operación de E/S, el proveedor asigna un búfer pequeño y lo empaqueta con un puntero al procedimiento de finalización proporcionado por el cliente y los valores de parámetro para pasar al procedimiento.
- Pone en cola un APC, especificando el puntero al búfer como el valor dwContext y su propio procedimiento intermedio como el procedimiento de destino lpfnUserApc.
- Cuando el subproceso de destino finalmente entra en estado de espera alertable, se llama al procedimiento intermedio del proveedor de servicios en el contexto de subproceso adecuado.
- El procedimiento intermedio simplemente desempaqueta parámetros, desasigna el búfer y llama al procedimiento de finalización proporcionado por el cliente.
Requisitos
Cliente mínimo compatible | Windows 2000 Professional [solo aplicaciones de escritorio] |
Servidor mínimo compatible | Windows 2000 Server [solo aplicaciones de escritorio] |
Plataforma de destino | Windows |
Encabezado | ws2spi.h |