关于 thrdcore.cpp 内存泄漏问题

问题现象描述如下:

Detected memory leaks!
Dumping objects ->
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\thrdcore.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

 

转载于:https://www.cnblogs.com/hhj-321/p/4194673.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值