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 的侵害,而不是通过控制对其句柄的访问。 CreateThreadCreateProcess 函数返回的线程句柄具有THREAD_TERMINATE访问权限,因此任何持有这些句柄之一的调用方都可以终止线程。

如果目标线程是调用此函数时进程的最后一个线程,则线程的进程也会终止。

线程对象的状态将发出信号,释放已等待线程终止的任何其他线程。 线程的终止状态从 STILL_ACTIVE 更改为 dwExitCode 参数的值。

终止线程不一定从系统中删除线程对象。 关闭最后一个线程句柄时,将删除线程对象。

要求

要求
最低受支持的客户端 Windows XP [仅限桌面应用]
最低受支持的服务器 Windows Server 2003 [仅限桌面应用]
目标平台 Windows
标头 processthreadsapi.h (包括 Windows Server 2003、Windows Vista、Windows 7、Windows Server 2008 Windows Server 2008 R2)
Library Kernel32.lib
DLL Kernel32.dll

另请参阅

CreateProcess

CreateThread

ExitThread

GetExitCodeThread

OpenThread

进程和线程函数

终止线程

线程