我正在使用监视程序线程来监视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
}
答案 0 :(得分:1)
来自TerminateThread()
的文档:
系统释放线程的初始堆栈。
你正在咆哮错误的树。
您当然应该使用C ++线程类,而不是直接使用CreateThread()/TerminateThread()
。