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 |
---|---|
|
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. |
|
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. |
|
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. |
|
La funzione di callback può eseguire una lunga attesa. Questo flag consente al sistema di decidere se deve creare un nuovo thread. |
|
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 |