Funzione TerminateThread (processthreadsapi.h)
Termina un thread.
Sintassi
BOOL TerminateThread(
[in, out] HANDLE hThread,
[in] DWORD dwExitCode
);
Parametri
[in, out] hThread
Handle per il thread da terminare.
L'handle deve avere il diritto di accesso THREAD_TERMINATE . Per altre informazioni, vedere Thread Security and Access Rights.For more information, see Thread Security and Access Rights.
[in] dwExitCode
Codice di uscita per il thread. Usare la funzione GetExitCodeThread per recuperare il valore di uscita di un thread.
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
TerminaThread viene usato per causare l'uscita di un thread. In questo caso, il thread di destinazione non ha la possibilità di eseguire codice in modalità utente. Le DLL collegate al thread non notificano che il thread termina. Il sistema libera lo stack iniziale del thread.
Windows Server 2003 e Windows XP: Lo stack iniziale del thread di destinazione non viene liberato, causando una perdita di risorse.
TerminateThread è una funzione pericolosa che deve essere usata solo nei casi più estremi. È consigliabile chiamare TerminateThread solo se si conosce esattamente il thread di destinazione e si controlla tutto il codice che il thread di destinazione potrebbe essere in esecuzione al momento della terminazione. Ad esempio, TerminateThread può causare i problemi seguenti:
- Se il thread di destinazione possiede una sezione critica, la sezione critica non verrà rilasciata.
- Se il thread di destinazione alloca memoria dall'heap, il blocco heap non verrà rilasciato.
- Se il thread di destinazione esegue determinate chiamate kernel32 quando viene terminato, lo stato del kernel32 per il processo del thread potrebbe essere incoerente.
- Se il thread di destinazione modifica lo stato globale di una DLL condivisa, lo stato della DLL potrebbe essere distrutto, che influisce sugli altri utenti della DLL.
Se il thread di destinazione è l'ultimo thread di un processo quando questa funzione viene chiamata, il processo del thread viene terminato anche.
Lo stato dell'oggetto thread viene segnalato, rilasciando qualsiasi altro thread che era in attesa che il thread venga terminato. Lo stato di terminazione del thread cambia da STILL_ACTIVE al valore del parametro dwExitCode .
La terminazione di un thread non rimuove necessariamente l'oggetto thread dal sistema. Un oggetto thread viene eliminato quando l'ultimo handle di thread viene chiuso.
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 | processthreadsapi.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 |