TerminateThread函数学习

作者:TerminateThread函数学习 来源:未知 2022-06-21 01:47   阅读:

终结一个线程。BOOLWINAPITerminateThread(_Inout_HANDLEhThread,_In_DWORDdwExitCode);hThread[in,out]要终结

终结一个线程。

BOOL WINAPI TerminateThread(
  _Inout_  HANDLE hThread,
  _In_     DWORD dwExitCode
);
hThread [in, out]

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

dwExitCode [in]

线程的退出值。

如果函数成功,返回非0值。

如果失败,返回0.

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

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

本函数是危险的,只能在极端情况下运用。如果你知道目标线程正在做什么,你可以调用TerminateThread;而且你可以控制目标线程在终结时运行的代码。比如,TerminateThread调用可能会引起下列问题:

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

调用了TerminateThread,线程就不能自我保护,没有控制自己handle的权利了。通过CreateThread和CreateProcess返回的线程句柄用THREAD_TERMINATE的权利,因此任何调用者都能通过这些句柄来终结这个线程。

如果目标线程是进程的最后一个线程,线程的进程也会终结。

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

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


分享给小伙伴们:
TerminateThread函数学习:如果本文侵犯了您的权利, 请联系本网立即做出处理,谢谢。
当前位置:诚朴作文网 > 跟着作文网TerminateThread函数学习转载请注明出处。
下一篇:没有了
TerminateThread函数学习相关文章