强行杀死线程后如何手动释放堆栈内存?

时间:2016-05-19 05:15:43

标签: c++ multithreading terminate

我正在使用监视程序线程来监视visual c ++中的子线程,并且看门狗将终止子进程并创建一个新的子线程,如果它在一段时间后停止向监视程序发送事件。在我的测试中,我反复终止并重新生成子线程,然后才有机会退出,并且我发现它导致内存泄漏。我的主要怀疑是由于孩子创建的堆栈内存,并且在终止时无法释放。在重新生成新的子线程之前,看门狗线程有没有办法手动释放子线程的堆栈内存?我实际上使用这种方法来杀死任何冻结线程,到目前为止,TerminateThread()是我唯一的选择。下面是我如何进行测试的简单说明。谢谢。

void watchdogFunc (void)
{
    while(true){
        child  = CreateThread(NULL, 0, childFunc, NULL, 0, NULL);
        TerminateThread(child, 1);
    }
}

void childFunc (void)
{
    while(true){} //simulated thread freeze
}

1 个答案:

答案 0 :(得分:1)

来自TerminateThread()的文档:

  

系统释放线程的初始堆栈。

你正在咆哮错误的树。

您当然应该使用C ++线程类,而不是直接使用CreateThread()/TerminateThread()