c++ - 线程被强杀后如何手动释放栈内存?

标签 c++ multithreading terminate

我在 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/

相关文章:

c++ - MFC制作带有自定义图标的lnk

java - JDBC 在 "same"时间打开 2 个连接

c# - 是否可以安排中断计划的时间?

c - pthread 程序中例程的额外执行时间花费了什么?

c# - 自定义多线程循环

java - 我应该如何终止 Java 中的循环子线程?

c++ - 如何干净利落地结束 Lua 线程?

c++ - 我应该在 Visual Studio 下为 Linux 交叉开发吗

c++ - 从方法返回引用

c++ - `constexpr` 变量 "used in its own initializer": Clang vs. GCC