关于 thrdcore.cpp 内存泄漏问题
2014-12-30 22:13
239 查看
问题现象描述如下:
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
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
相关文章推荐
- 关于内存泄漏检测问题,和大家一起分享
- 关于IE内存泄漏问题...
- 关于内存泄漏的问题-哪些变量需要释放
- Hdu 1287 【关于异或要注意的问题】.cpp
- 回复师弟一个关于Java内存泄漏的问题
- 关于ExitInstance不执行,导致很多内存泄漏的问题
- Go 贡献者 minux.ma 关于内存泄漏问题的详细解释
- 关于CppSqlite中数据库文件中文路径识别问题的解决法
- cocos2d 关于Eclipse 提示 :please define NDK_ROOT的问题(解决Eclipse不会自动编译CPP的问题)
- 关于Javascript的内存泄漏问题
- 关于CppSqlite中数据库文件中文路径识别问题的解决方法
- 关于tomcat内存泄漏问题
- 关于vs2010(C++ 工程)的异常问题(this is not a valid c/c++ file .CPP)的解决(C++ 初学者)
- Android:关于ListView的内存泄漏问题
- 关于内存泄漏检测问题,和大家一起分享
- 关于 JAVA 的内存泄漏问题
- 关于内存泄漏问题
- 关于jsoncpp内部排序的问题
- 关于 Linq to EF 的内存泄漏问题
- 关于dao得一些使用问题,以备忘....也用来纪念自己解决得第一个内存泄漏问题