Partager via


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.
Un thread ne peut pas se protéger contre TerminateThread, autre qu’en contrôlant l’accès à ses handles. Le handle de thread retourné par les fonctions CreateThread et CreateProcess a THREAD_TERMINATE accès, de sorte que tout appelant qui contient l’un de ces handles peut arrêter votre thread.

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

Voir aussi

CreateProcess

CreateThread

ExitThread

GetExitCodeThread

OpenThread

Fonctions de processus et de thread

Arrêt d’un thread

Threads