Condividi tramite


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.
Un thread non può proteggersi da TerminateThread, diverso dal controllo dell'accesso ai relativi handle. L'handle del thread restituito dalle funzioni CreateThread e CreateProcess ha THREAD_TERMINATE accesso, quindi qualsiasi chiamante che mantiene uno di questi handle può terminare il thread.

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

Vedere anche

CreateProcess

CreateThread

ExitThread

GetExitCodeThread

OpenThread

Funzioni di processi e thread

Terminazione di un thread

Thread