TerminateThread, fonction (processthreadsapi.h)
Termine un thread.
Syntaxe
BOOL TerminateThread(
[in, out] HANDLE hThread,
[in] DWORD dwExitCode
);
Paramètres
[in, out] hThread
Handle du thread à terminer.
Le handle doit avoir le droit d’accès THREAD_TERMINATE . Pour plus d’informations, consultez Sécurité des threads et droits d’accès.
[in] dwExitCode
Code de sortie du thread. Utilisez la fonction GetExitCodeThread pour récupérer la valeur de sortie d’un thread.
Valeur retournée
Si la fonction réussit, la valeur de retour est différente de zéro.
Si la fonction échoue, la valeur de retour est égale à zéro. Pour obtenir des informations détaillées sur l’erreur, appelez GetLastError.
Remarques
TerminateThread est utilisé pour provoquer la fermeture d’un thread. Lorsque cela se produit, le thread cible n’a aucune chance d’exécuter du code en mode utilisateur. Les DLL attachées au thread ne sont pas informées de la fin du thread. Le système libère la pile initiale du thread.
Windows Server 2003 et Windows XP : La pile initiale du thread cible n’est pas libérée, ce qui provoque une fuite de ressources.
TerminateThread est une fonction dangereuse qui ne doit être utilisée que dans les cas les plus extrêmes. Vous devez appeler TerminateThread uniquement si vous savez exactement ce que fait le thread cible et que vous contrôlez tout le code que le thread cible peut éventuellement exécuter au moment de l’arrêt. Par exemple, TerminateThread peut entraîner les problèmes suivants :
- Si le thread cible possède une section critique, la section critique n’est pas publiée.
- Si le thread cible alloue de la mémoire à partir du tas, le verrou de tas n’est pas libéré.
- Si le thread cible exécute certains appels kernel32 lorsqu’il est arrêté, l’état kernel32 du processus du thread peut être incohérent.
- Si le thread cible manipule l’état global d’une DLL partagée, l’état de la DLL peut être détruit, affectant les autres utilisateurs de la DLL.
Si le thread cible est le dernier thread d’un processus lorsque cette fonction est appelée, le processus du thread est également terminé.
L’état de l’objet thread est signalé, libérant tous les autres threads qui attendaient la fin du thread. Le status d’arrêt du thread passe de STILL_ACTIVE à la valeur du paramètre dwExitCode.
La fin d’un thread ne supprime pas nécessairement l’objet thread du système. Un objet thread est supprimé lorsque le dernier handle de thread est fermé.
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Windows XP [applications de bureau uniquement] |
Serveur minimal pris en charge | Windows Server 2003 [applications de bureau uniquement] |
Plateforme cible | Windows |
En-tête | processthreadsapi.h (inclure Windows.h sur Windows Server 2003, Windows Vista, Windows 7, Windows Server 2008 Windows Server 2008 R2) |
Bibliothèque | Kernel32.lib |
DLL | Kernel32.dll |