Функция 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.
Если целевой поток является последним потоком процесса при вызове этой функции, процесс потока также завершается.
Состояние объекта потока становится сигнальным, освобождая все другие потоки, ожидавшие завершения потока. Состояние завершения потока изменяется с 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 |