为处于挂起状态c ++的线程调用TerminateThread

时间:2014-03-05 04:19:15

标签: c++ multithreading mfc

当调用TerminateThread时,即使线程处于挂起状态,线程也会终止吗?

1 个答案:

答案 0 :(得分:3)

TerminateThread function会破坏线程,无论其状态或可能的副作用如何。链接的MSDN页面详细介绍了这一点。

  

TerminateThread 用于导致线程退出。发生这种情况时,目标线程无法执行任何用户模式代码。附加到线程的DLL不会通知线程正在终止。系统释放线程的初始堆栈。

     

Windows Server 2003和Windows XP:目标线程的初始堆栈未被释放,导致资源泄漏。

     

TerminateThread 是一种危险的功能,只能在最极端的情况下使用。只有当您确切知道目标线程正在执行的操作时,才应调用 TerminateThread ,并且您可以控制目标线程在终止时可能正在运行的所有代码。例如, TerminateThread 可能会导致以下问题:

我必须问你为什么要调用它,因为它绝对是关闭线程的最后手段。除非你非常幸运或小心,否则你的应用程序会泄漏内存和其他资源。