Compartir a través de


Función QueueUserWorkItem (threadpoollegacyapiset.h)

Pone en cola un elemento de trabajo en un subproceso de trabajo del grupo de subprocesos.

Sintaxis

BOOL QueueUserWorkItem(
  [in]           LPTHREAD_START_ROUTINE Function,
  [in, optional] PVOID                  Context,
  [in]           ULONG                  Flags
);

Parámetros

[in] Function

Puntero a la función de devolución de llamada definida por la aplicación de tipo LPTHREAD_START_ROUTINE que ejecutará el subproceso en el grupo de subprocesos. Este valor representa la dirección inicial del subproceso. Esta función de devolución de llamada no debe llamar a la función TerminateThread .

No se usa el valor devuelto de la función de devolución de llamada.

Para obtener más información, vea ThreadProc.

[in, optional] Context

Valor de parámetro único que se va a pasar a la función de subproceso.

[in] Flags

Marcas que controlan la ejecución. Este parámetro puede ser uno o más de los siguientes valores.

Valor Significado
WT_EXECUTEDEFAULT
0x00000000
De forma predeterminada, la función de devolución de llamada se pone en cola en un subproceso de trabajo que no es de E/S.

La función de devolución de llamada se pone en cola en un subproceso que usa puertos de finalización de E/S, lo que significa que no pueden realizar una espera de alerta. Por lo tanto, si la E/S se completa y genera un APC, el APC podría esperar indefinidamente porque no hay ninguna garantía de que el subproceso entrará en un estado de espera alertable una vez completada la devolución de llamada.

WT_EXECUTEINIOTHREAD
0x00000001
Esta marca no se usa.

Windows Server 2003 y Windows XP: La función de devolución de llamada se pone en cola en un subproceso de trabajo de E/S. Esta marca se debe usar si la función debe ejecutarse en un subproceso que espera en un estado de alerta.

Los subprocesos de trabajo de E/S se quitaron a partir de Windows Vista y Windows Server 2008.

WT_EXECUTEINPERSISTENTTHREAD
0x00000080
La función de devolución de llamada se pone en cola en un subproceso que nunca finaliza. No garantiza que se use el mismo subproceso cada vez. Esta marca solo se debe usar para tareas cortas o podría afectar a otras operaciones del temporizador.

Esta marca debe establecerse si el subproceso llama a funciones que usan API. Para obtener más información, vea Llamadas asincrónicas a procedimientos.

Tenga en cuenta que actualmente no hay ningún subproceso de trabajo realmente persistente, aunque los subprocesos de trabajo no finalizan si hay solicitudes de E/S pendientes.

WT_EXECUTELONGFUNCTION
0x00000010
La función de devolución de llamada puede realizar una larga espera. Esta marca ayuda al sistema a decidir si debe crear un subproceso nuevo.
WT_TRANSFER_IMPERSONATION
0x00000100
Las funciones de devolución de llamada usarán el token de acceso actual, ya sea un token de proceso o suplantación. Si no se especifica esta marca, las funciones de devolución de llamada solo se ejecutan con el token de proceso.

Windows XP: Esta marca no se admite hasta Windows XP SP2 y Windows Server 2003.

Valor devuelto

Si la función se realiza correctamente, el valor devuelto es distinto de cero.

Si la función no se realiza correctamente, el valor devuelto es cero. Para obtener información de error extendida, llame a GetLastError.

Comentarios

Si una función de un archivo DLL se pone en cola en un subproceso de trabajo, asegúrese de que la función ha completado la ejecución antes de descargar el archivo DLL.

De forma predeterminada, el grupo de subprocesos tiene un máximo de 512 subprocesos por proceso. Para aumentar el límite de colas, use la macro WT_SET_MAX_THREADPOOL_THREAD definida en WinNT.h.

#define WT_SET_MAX_THREADPOOL_THREADS(Flags,Limit) \
    ((Flags)|=(Limit)<<16)

Use esta macro en la llamada a QueueUserWorkItem para especificar el parámetro Flags . Los parámetros de macro son las marcas deseadas y el nuevo límite, hasta (2<<16)-1 subprocesos. Sin embargo, el tamaño de la cola está limitado por el tamaño del grupo no paginado del kernel. Tenga en cuenta que la aplicación puede mejorar su rendimiento manteniendo el número de subprocesos de trabajo bajos.

Para compilar una aplicación que usa esta función, defina _WIN32_WINNT como 0x0500 o posterior. Para obtener más información, vea Usar los encabezados de Windows.

Requisitos

Requisito Value
Cliente mínimo compatible Windows XP [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server 2003 [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado threadpoollegacyapiset.h (incluye Windows.h en Windows Server 2003, Windows Vista, Windows 7, Windows Server 2008 Windows Server 2008 R2)
Library Kernel32.lib
Archivo DLL Kernel32.dll

Vea también

Funciones de proceso y subproceso

Agrupación de subprocesos

ThreadProc