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.
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 |