Поделиться через


Функция ExitThread (processthreadsapi.h)

Завершает вызывающий поток.

Синтаксис

void ExitThread(
  [in] DWORD dwExitCode
);

Параметры

[in] dwExitCode

Код выхода для потока.

Возвращаемое значение

None

Remarks

ExitThread является предпочтительным методом выхода из потока в коде C. Однако в коде C++ поток завершается до вызова деструкторов или выполнения любой другой автоматической очистки. Поэтому в коде C++ следует возвращать данные из функции потока.

При вызове этой функции (явным образом или путем возврата из процедуры потока) стек текущего потока освобождается, все ожидающие операции ввода-вывода, инициированные потоком, который не связан с портом завершения, отменяется, а поток завершается. Функция точки входа всех присоединенных библиотек динамической компоновки (DLL) вызывается со значением, указывающим, что поток отсоединяется от библиотеки DLL.

Если поток является последним потоком в процессе при вызове этой функции, процесс потока также завершается.

Состояние объекта потока становится сигнальным, освобождая все другие потоки, ожидавшие завершения потока. Состояние завершения потока изменяется с STILL_ACTIVE на значение параметра dwExitCode .

Завершение потока не обязательно удаляет объект потока из операционной системы. Объект потока удаляется при закрытии последнего дескриптора потока.

Функции ExitProcess, ExitThread, CreateThread, CreateRemoteThread и процесс, который запускается (в результате вызова CreateProcess ), сериализуются друг между другом в рамках процесса. Только одно из этих событий может происходить в адресном пространстве одновременно. Это означает, что удерживают следующие ограничения:

  • Во время запуска процесса и процедур инициализации DLL можно создавать новые потоки, но они не начинают выполнение, пока не будет выполнена инициализация DLL для процесса.
  • В процедуре инициализации или отсоединения DLL одновременно может находиться только один поток в процессе.
  • ExitProcess не возвращается до тех пор, пока потоки не находятся в подпрограммах инициализации dll или отсоединения.
Поток в исполняемом файле, связанный со статической библиотекой времени выполнения C (CRT), должен использовать _beginthread и _endthread для управления потоками, а не CreateThread и ExitThread. В этом случае происходит небольшая утечка памяти, когда поток вызывает ExitThread. Другой обходной путь — связать исполняемый файл с CRT в библиотеке DLL, а не со статическим CRT. Обратите внимание, что эта утечка памяти происходит из библиотеки DLL, только если библиотека DLL связана со статическим CRT, а поток вызывает функцию DisableThreadLibraryCalls . В противном случае можно безопасно вызывать CreateThread и ExitThread из потока в библиотеке DLL, которая связана со статическим CRT.

Используйте функцию GetExitCodeThread для получения кода выхода потока.

Windows Phone 8.1. Эта функция поддерживается для приложений магазина Windows Phone в Windows Phone 8.1 и более поздних версиях.

Windows 8.1 и Windows Server 2012 R2: эта функция поддерживается для приложений Магазина Windows на Windows 8.1, Windows Server 2012 R2 и более поздних версий.

Примеры

Пример см. в разделе Использование объектов событий.

Требования

   
Минимальная версия клиента Windows XP [классические приложения | Приложения UWP]
Минимальная версия сервера Windows Server 2003 [классические приложения | Приложения UWP]
Целевая платформа Windows
Header processthreadsapi.h (включая Windows.h в Windows Server 2003, Windows Vista, Windows 7, Windows Server 2008 Windows Server 2008 R2)
Библиотека Kernel32.lib; WindowsPhoneCore.lib в Windows Phone 8.1
DLL Kernel32.dll; KernelBase.dll Windows Phone 8.1

См. также раздел

CreateProcess

CreateRemoteThread

CreateThread

ExitProcess

FreeLibraryAndExitThread

GetExitCodeThread

OpenThread

Функции процессов и потоков

TerminateThread

Потоки