我在 Visual C++ 中使用看门狗线程监视子线程,如果看门狗在一定时间后停止向看门狗发送事件,它将终止该子线程并创建一个新的子线程。在我的测试中,我反复终止并重新生成子线程,在它有机会退出之前,我发现它会导致内存泄漏。我的主要怀疑是由于 child 创建的堆栈内存在终止时未能释放。在重新生成新的子线程之前,看门狗线程有没有办法手动释放子线程的堆栈内存?我实际上使用此方法来终止任何卡住线程,到目前为止,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
}
最佳答案
来自 TerminateThread()
的文档:
The system frees the thread's initial stack.
你找错人了。
您当然应该使用 C++ 线程类,而不是直接使用 CreateThread()/TerminateThread()
。
关于c++ - 线程被强杀后如何手动释放栈内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37314404/