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


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

Завершает поток.

Синтаксис

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

Параметры

[in, out] hThread

Дескриптор для прерываемого потока.

Дескриптор должен иметь право доступа THREAD_TERMINATE . Дополнительные сведения см. в разделе Безопасность потоков и права доступа.

[in] dwExitCode

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

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

Если функция выполняется успешно, возвращается ненулевое значение.

Если функция выполняется неудачно, возвращается нулевое значение. Дополнительные сведения об ошибке можно получить, вызвав GetLastError.

Комментарии

TerminateThread используется, чтобы вызвать выход потока. В этом случае целевой поток не имеет возможности выполнить какой-либо код в пользовательском режиме. Библиотеки DLL, подключенные к потоку, не получают уведомления о том, что поток завершается. Система освобождает начальный стек потока.

Windows Server 2003 и Windows XP: Начальный стек целевого потока не освобождается, что приводит к утечке ресурсов.

TerminateThread — это опасная функция, которую следует использовать только в самых крайних случаях. Метод TerminateThread следует вызывать только в том случае, если вы точно знаете, что делает целевой поток, и контролируете весь код, который может выполняться в целевом потоке во время завершения. Например, TerminateThread может привести к следующим проблемам:

  • Если целевому потоку принадлежит критически важный раздел, критический раздел не будет освобожден.
  • Если целевой поток выделяет память из кучи, блокировка кучи не будет освобождена.
  • Если целевой поток выполняет определенные вызовы kernel32 при завершении, состояние kernel32 для процесса потока может быть несогласованным.
  • Если целевой поток управляет глобальным состоянием общей библиотеки DLL, состояние библиотеки DLL может быть уничтожено, что повлияет на других пользователей библиотеки DLL.
Поток не может защитить себя от TerminateThread, кроме как путем управления доступом к его дескрипторам. Дескриптор потока, возвращаемый функциями CreateThread и CreateProcess , имеет THREAD_TERMINATE доступ, поэтому любой вызывающий объект, содержащий один из этих дескрипторов, может завершить поток.

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

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

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

Требования

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

См. также

CreateProcess

CreateThread

ExitThread

GetExitCodeThread

OpenThread

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

Завершение потока

Потоки