TerminateThread函数终止线程。
BOOL TerminateThread(
HANDLE 【hThread】, | //处理线程 |
DWORD 【dwExitCode】 | //为线程退出代码 |
); |
参数
【hThread】
标识要终止的线程。
Windows NT:句柄必须具有THREAD_TERMINATE访问权限。有关详细信息,请参阅线程对象.
【dwExitCode】
指定线程的退出代码。使用GetExitCodeThread函数检索线程的退出值。
返回值
如果函数成功,返回值不为零。
如果函数失败,返回值为零。要获取扩展错误信息,请调用GetLastError.
备注
TerminateThread用于使线程退出。当这种情况发生时,目标线程没有机会执行任何用户模式代码,并且其初始堆栈未被释放。连接到线程的DLL不会通知线程正在终止。
TerminateThread是一种危险的功能,只能在极端情况下使用。只有当您确切了解目标线程正在执行的操作时,才应调用TerminateThread,并且在终止时控制目标线程可能运行的所有代码。例如,TerminateThread可能会导致以下问题:
*如果目标线程拥有一个关键部分,那么关键部分将不会被释放。
*如果目标线程在终止时执行某些kernel32调用,则线程进程的kernel32状态可能不一致。
*如果目标线程正在操纵共享DLL的全局状态,则DLL的状态可能会被破坏,从而影响DLL的其他用户。
除了通过控制对其句柄的访问之外,线程不能保护自身免受TerminateThread的影响。由CreateThread和CreateProcess函数返回的线程句柄具有THREAD_TERMINATE访问权限,因此任何持有其中一个句柄的调用者可以终止您的线程。
如果目标线程是调用此函数的进程的最后一个线程,则线程的进程也将被终止。
线程对象的状态变为信号,释放等待线程终止的任何其他线程。线程的终止状态从STILL_ACTIVE更改为【dwExitCode】参数的值。
终止线程不一定会从系统中删除线程对象。当最后一个线程句柄关闭时,线程对象被删除。
也可以看看