问题现象描述以下:函数
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.ui
缘由分析:spa
关闭程序,执行到析构函数时,在析构函数末尾会强制关闭子线程函数。因为,子线程是强制关闭的, 因此子线程未执行完毕就被关闭了,.net
所以,子线程所用到的资源未能及时释放,所以引发了内存泄露。线程
解决思路:blog
既然是没有正常结束线程,那么咱们就让他自动结束应该就ok了,下面提供一种参考方案。事件
第一步: 创建全局变量 ip
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