TerminateThread函数学习

终结一个线程。windows

 

BOOL WINAPI TerminateThread(
  _Inout_  HANDLE hThread,
  _In_     DWORD dwExitCode
);

Parameters

hThread [in, out]

要终结线程的句柄。这个句柄必须有THREAD_TERMINATE权利。ide

dwExitCode [in]

线程的退出值。函数

返回值

 

若是函数成功,返回非0值。spa

若是失败,返回0.线程

注意

函数是用来推出线程。当函数调执行,目标线程没有机会执行任何用户级代码。与DLL关联的线程不被通知就终结了。系统是否线程的初始栈。对象

Windows Server 2003 and Windows XP:  目标线程的栈没被释放,会引发资源泄漏。进程

本函数是危险的,只能在极端状况下运用。若是你知道目标线程正在作什么,你能够调用TerminateThread;并且你能够控制目标线程在终结时运行的代码。好比,TerminateThread调用可能会引发下列问题:内存

  • 若是目标线程拥有关键段,那么关键段不会被释放。【这将引发资源泄漏和死锁】
  • 若是目标线程在堆上申请内存,不会被释放。【内存泄漏】
  • 若是目标线程执行某个kernel32调用,当天终结时,对于线程所在进程的kernel32状态会不连续。
  • 若是目标线程在操做一个共享DLL的全局状态,DLL的状态可能被破坏,从而影响DLL的其余使用者。

调用了TerminateThread,线程就不能自我保护,没有控制本身handle的权利了。经过CreateThreadCreateProcess返回的线程句柄用THREAD_TERMINATE的权利,所以任何调用者都能经过这些句柄来终结这个线程。ci

若是目标线程是进程的最后一个线程,线程的进程也会终结。资源

线程对象的状态会被激发,释听任何其余线程等待此线程终结的信号。【也就是WaitForSingleObject[threadID,]会变为激发态】

终止一个线程没有必要从系统移除线程对象。当最后一个线程句柄关闭时线程对象被删除。

相关文章
相关标签/搜索