zoukankan      html  css  js  c++  java
  • 关于 thrdcore.cpp 内存泄漏问题

    问题现象描述如下:

    Detected memory leaks!
    Dumping objects ->
    f:ddvctoolsvc7libsshipatlmfcsrcmfc hrdcore.cpp(306) : {271} client block at 0x0056B5F8, subtype c0, 68 bytes long.

    原因分析:

      关闭程序,执行到析构函数时,在析构函数末尾会强制关闭子线程函数。由于,子线程是强制关闭的, 所以子线程未执行完毕就被关闭了,

    因此,子线程所用到的资源未能及时释放,因此引起了内存泄露。

    解决思路:

      既然是没有正常结束线程,那么我们就让他自动结束应该就ok了,下面提供一种参考方案。

    第一步: 建立全局变量 

      bool g_bThread = TRUE;      // 子线程循环条件

      HANDLE g_hEven t = NULL;    // Event事件 

    第二步: 在创建线程前,创建一个无信号的event事件 

      g_hEvent = CreateEvent(NULL,TRUE,FALSE,NULL); 

    第三步: 在子线程循环结束后,设置EVENT事件 

      while (  g_bThread )

      {

       // ...

      }

      SetEvent(g_hEvent); 

    第四步: 在主程序的析构函数中,修改 g_bThread并调用WaitForSingleObject(g_hEvent,INFINITE); 等待事件状态改变,而不是直接关闭程序。若事件状态改变 ,则意味 子线程函数跳出循环,可以正常退出。 

      g_bThread = FALSE;

      WaitForSingleObject(g_hEvent, INFINITE);

      CloseHandle(g_hEvent);

    备注:本文参考来源于http://blog.csdn.net/shuilan0066/article/details/6900986

  • 相关阅读:
    jQuery事件
    jQuery选择器
    jQuery对象和语法
    jQuery简介
    残差的正态性检验——概率图和QQ-plot图
    https://oldpan.me/深度学习博客
    深度学习的内存消耗在哪里?
    图片缩放
    随机梯度下降批尺寸的影响
    利用PIL.ImageOps.invert实现二值图像黑白反转
  • 原文地址:https://www.cnblogs.com/hhj-321/p/4194673.html
Copyright © 2011-2022 走看看