Condividi tramite


Funzione QueueUserWorkItem (threadpoollegacyapiset.h)

Accoda un elemento di lavoro a un thread di lavoro nel pool di thread.

Sintassi

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

Parametri

[in] Function

Puntatore alla funzione di callback definita dall'applicazione di tipo LPTHREAD_START_ROUTINE da eseguire dal thread nel pool di thread. Questo valore rappresenta l'indirizzo iniziale del thread. Questa funzione di callback non deve chiamare la funzione TerminateThread .

Il valore restituito della funzione di callback non viene usato.

Per altre informazioni, vedere ThreadProc.

[in, optional] Context

Valore di un singolo parametro da passare alla funzione thread.

[in] Flags

Flag che controllano l'esecuzione. Questo parametro può essere uno o più dei valori seguenti.

Valore Significato
WT_EXECUTEDEFAULT
0x00000000
Per impostazione predefinita, la funzione di callback viene accodata a un thread di lavoro non I/O.

La funzione di callback viene accodata a un thread che usa porte di completamento di I/O, che significa che non possono eseguire un'attesa avvisabile. Pertanto, se I/O viene completato e generato un APC, l'APC potrebbe attendere in modo indefinito perché non esiste alcuna garanzia che il thread immetterà uno stato di attesa avvisabile dopo il completamento del callback.

WT_EXECUTEINIOTHREAD
0x00000001
Questo flag non viene usato.

Windows Server 2003 e Windows XP: La funzione di callback viene accodata a un thread di lavoro di I/O. Questo flag deve essere usato se la funzione deve essere eseguita in un thread che attende in uno stato avvisabile.

I thread di lavoro di I/O sono stati rimossi a partire da Windows Vista e Windows Server 2008.

WT_EXECUTEINPERSISTENTTHREAD
0x00000080
La funzione di callback viene accodata a un thread che non termina mai. Non garantisce che lo stesso thread venga usato ogni volta. Questo flag deve essere usato solo per le attività brevi o potrebbe influire su altre operazioni timer.

Questo flag deve essere impostato se il thread chiama le funzioni che usano le API. Per altre informazioni, vedere Chiamate di procedura asincrone.

Si noti che attualmente nessun thread di lavoro è veramente persistente, anche se i thread di lavoro non terminano se sono presenti richieste di I/O in sospeso.

WT_EXECUTELONGFUNCTION
0x00000010
La funzione di callback può eseguire una lunga attesa. Questo flag consente al sistema di decidere se deve creare un nuovo thread.
WT_TRANSFER_IMPERSONATION
0x00000100
Le funzioni di callback useranno il token di accesso corrente, ovvero un processo o un token di rappresentazione. Se questo flag non è specificato, le funzioni di callback vengono eseguite solo con il token di processo.

Windows XP: Questo flag non è supportato fino a Windows XP SP2 e Windows Server 2003.

Valore restituito

Se la funzione ha esito positivo, il valore restituito è diverso da zero.

Se la funzione ha esito negativo, il valore restituito è zero. Per informazioni dettagliate sull'errore, chiamare GetLastError.

Commenti

Se una funzione in una DLL viene accodata a un thread di lavoro, assicurarsi che la funzione abbia completato l'esecuzione prima del caricamento della DLL.

Per impostazione predefinita, il pool di thread ha un massimo di 512 thread per processo. Per aumentare il limite di coda, usare la macro WT_SET_MAX_THREADPOOL_THREAD definita in WinNT.h.

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

Usare questa macro nella chiamata a QueueUserWorkItem per specificare il parametro Flags . I parametri della macro sono i flag desiderati e il nuovo limite, fino a (2<<16)-1 thread. Tuttavia, le dimensioni della coda sono limitate dalle dimensioni del pool non a pagina del kernel. Si noti che l'applicazione può migliorare le prestazioni mantenendo basso il numero di thread di lavoro.

Per compilare un'applicazione che usa questa funzione, definire _WIN32_WINNT come 0x0500 o versioni successive. Per altre informazioni, vedere Uso delle intestazioni di Windows.

Requisiti

Requisito Valore
Client minimo supportato Windows XP [solo app desktop]
Server minimo supportato Windows Server 2003 [solo app desktop]
Piattaforma di destinazione Windows
Intestazione threadpoollegacyapiset.h (includere Windows.h in Windows Server 2003, Windows Vista, Windows 7, Windows Server 2008 Windows Server 2008 R2)
Libreria Kernel32.lib
DLL Kernel32.dll

Vedere anche

Funzioni di processi e thread

Pooling dei thread

Threadproc