TerminateThread-Funktion (processthreadsapi.h)

Beendet einen Thread.

Syntax

BOOL TerminateThread(
  [in, out] HANDLE hThread,
  [in]      DWORD  dwExitCode
);

Parameter

[in, out] hThread

Ein Handle für den zu beendenden Thread.

Das Handle muss über das Zugriffsrecht THREAD_TERMINATE verfügen. Weitere Informationen finden Sie unter Threadsicherheit und Zugriffsrechte.

[in] dwExitCode

Der Exitcode für den Thread. Verwenden Sie die GetExitCodeThread-Funktion , um den Exitwert eines Threads abzurufen.

Rückgabewert

Wenn die Funktion erfolgreich ist, ist der Rückgabewert ungleich Null.

Wenn die Funktion fehlerhaft ist, ist der Rückgabewert null. Um erweiterte Fehlerinformationen zu erhalten, rufen Sie GetLastError auf.

Hinweise

TerminateThread wird verwendet, um zu bewirken, dass ein Thread beendet wird. In diesem Fall hat der Zielthread keine Chance, Code im Benutzermodus auszuführen. DLLs, die an den Thread angefügt sind, werden nicht benachrichtigt, dass der Thread beendet wird. Das System gibt den anfänglichen Stapel des Threads frei.

Windows Server 2003 und Windows XP: Der anfängliche Stapel des Zielthreads wird nicht freigegeben, was zu einem Ressourcenverlust führt.

TerminateThread ist eine gefährliche Funktion, die nur in den extremsten Fällen verwendet werden sollte. Sie sollten TerminateThread nur aufrufen, wenn Sie genau wissen, was der Zielthread tut, und Sie den gesamten Code steuern, den der Zielthread möglicherweise zum Zeitpunkt der Beendigung ausführen könnte. TerminateThread kann beispielsweise zu den folgenden Problemen führen:

  • Wenn der Zielthread einen kritischen Abschnitt besitzt, wird der kritische Abschnitt nicht freigegeben.
  • Wenn der Zielthread Arbeitsspeicher aus dem Heap zugibt, wird die Heapsperre nicht freigegeben.
  • Wenn der Zielthread bestimmte kernel32-Aufrufe ausführt, wenn er beendet wird, kann der Kernel32-Zustand für den Prozess des Threads inkonsistent sein.
  • Wenn der Zielthread den globalen Zustand einer freigegebenen DLL bearbeitet, kann der Zustand der DLL zerstört werden, was andere Benutzer der DLL beeinträchtigt.
Ein Thread kann sich nicht selbst vor TerminateThread schützen, außer durch das Steuern des Zugriffs auf seine Handles. Das von den Funktionen CreateThread und CreateProcess zurückgegebene Threadhandle verfügt über THREAD_TERMINATE Zugriff, sodass jeder Aufrufer, der eines dieser Handles enthält, den Thread beenden kann.

Wenn der Zielthread der letzte Thread eines Prozesses ist, wenn diese Funktion aufgerufen wird, wird auch der Prozess des Threads beendet.

Der Status des Threadobjekts wird signalisiert, sodass alle anderen Threads freigegeben werden, die auf das Beenden des Threads gewartet haben. Die Beendigung des Threads status von STILL_ACTIVE in den Wert des dwExitCode-Parameters geändert.

Durch das Beenden eines Threads wird das Threadobjekt nicht notwendigerweise aus dem System entfernt. Ein Threadobjekt wird gelöscht, wenn das letzte Threadhandle geschlossen wird.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows XP [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows Server 2003 [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile processthreadsapi.h (enthalten Windows.h unter Windows Server 2003, Windows Vista, Windows 7, Windows Server 2008 Windows Server 2008 R2)
Bibliothek Kernel32.lib
DLL Kernel32.dll

Siehe auch

CreateProcess

CreateThread

ExitThread

GetExitCodeThread

OpenThread

Prozess- und Threadfunktionen

Beenden eines Threads

Threads