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 |
标头 | processthreadsapi.h (包括 Windows Server 2003、Windows Vista、Windows 7、Windows Server 2008 Windows Server 2008 R2) |
Library | Kernel32.lib |
DLL | Kernel32.dll |