Freigeben über


ExitThread-Funktion (processthreadsapi.h)

Beendet den aufrufenden Thread.

Syntax

void ExitThread(
  [in] DWORD dwExitCode
);

Parameter

[in] dwExitCode

Der Exitcode für den Thread.

Rückgabewert

Keine

Bemerkungen

ExitThread ist die bevorzugte Methode zum Beenden eines Threads in C-Code. In C++-Code wird der Thread jedoch beendet, bevor Destruktoren aufgerufen oder andere automatische Bereinigungen durchgeführt werden können. Daher sollten Sie in C++-Code von Ihrer Threadfunktion zurückgeben.

Wenn diese Funktion aufgerufen wird (entweder explizit oder durch Zurückgeben aus einer Threadprozedur), wird der Stapel des aktuellen Threads zugeordnet, alle ausstehenden E/A-Vorgänge, die von dem Thread initiiert werden, der keinem Vervollständigungsport zugeordnet ist, abgebrochen, und der Thread wird beendet. Die Einstiegspunktfunktion aller angefügten DLLs (Dynamic Link Libraries) wird mit einem Wert aufgerufen, der angibt, dass sich der Thread von der DLL trennt.

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

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

Das Beenden eines Threads entfernt das Threadobjekt nicht unbedingt aus dem Betriebssystem. Ein Threadobjekt wird gelöscht, wenn das letzte Handle für den Thread geschlossen wird.

Die Funktionen ExitProcess, ExitThread, CreateThread, CreateRemoteThread und ein Prozess, der (als Ergebnis eines CreateProcess-Aufrufs ) gestartet wird, werden innerhalb eines Prozesses serialisiert. Nur eines dieser Ereignisse kann gleichzeitig in einem Adressraum auftreten. Dies bedeutet, dass die folgenden Einschränkungen gelten:

  • Während der Prozessstart- und DLL-Initialisierungsroutinen können neue Threads erstellt werden, sie beginnen jedoch erst mit der Ausführung, wenn die DLL-Initialisierung für den Prozess abgeschlossen ist.
  • Nur ein Thread in einem Prozess kann sich in einer DLL-Initialisierung oder einer Detach-Routine gleichzeitig befinden.
  • ExitProcess wird erst zurückgegeben, wenn sich keine Threads in ihren DLL-Initialisierungs- oder Trennroutinen befinden.
Ein Thread in einer ausführbaren Datei, der mit der statischen C-Laufzeitbibliothek (CRT) verknüpft ist, sollte _beginthread und _endthread für die Threadverwaltung anstelle von CreateThread und ExitThread verwenden. Wenn dies nicht geschieht, kommt es zu kleinen Speicherverlusten, wenn der Thread ExitThread aufruft. Ein weiteres Problem besteht darin, die ausführbare Datei mit dem CRT in einer DLL anstelle des statischen CRT zu verknüpfen. Beachten Sie, dass dieser Speicherverlust nur von einer DLL aus auftritt, wenn die DLL mit dem statischen CRT verknüpft ist und ein Thread die DisableThreadLibraryCalls-Funktion aufruft . Andernfalls ist es sicher, CreateThread und ExitThread aus einem Thread in einer DLL aufzurufen, die mit dem statischen CRT verknüpft ist.

Verwenden Sie die GetExitCodeThread-Funktion , um den Exitcode eines Threads abzurufen.

Windows Phone 8.1: Diese Funktion wird für Windows Phone Store-Apps unter Windows Phone 8.1 und höher unterstützt.

Windows 8.1 und Windows Server 2012 R2: Diese Funktion wird für Windows Store-Apps unter Windows 8.1, Windows Server 2012 R2 und höher unterstützt.

Beispiele

Ein Beispiel finden Sie unter Verwenden von Ereignisobjekten.

Anforderungen

   
Unterstützte Mindestversion (Client) Windows XP [Desktop-Apps | UWP-Apps]
Unterstützte Mindestversion (Server) Windows Server 2003 [Desktop-Apps | UWP-Apps]
Zielplattform Windows
Kopfzeile processthreadsapi.h (einschließlich Windows.h unter Windows Server 2003, Windows Vista, Windows 7, Windows Server 2008 Windows Server 2008 R2)
Bibliothek Kernel32.lib; WindowsPhoneCore.lib unter Windows Phone 8.1
DLL Kernel32.dll; KernelBase.dll am Windows Phone 8.1

Weitere Informationen

CreateProcess

CreateRemoteThread

CreateThread

ExitProcess

FreeLibraryAndExitThread

GetExitCodeThread

OpenThread

Prozess- und Threadfunktionen

TerminateThread

Threads