类似的问题见http://www.experts-exchange.com/Programming/Programming_Languages/MFC/Q_20084406.html
下面的代码,当用AfxBeginThread开始一个线程时,实际上是有内存泄漏的
for
(ii
=
0
; ii
<
1000
; ii
++
)
{
CWinThread
*
pWinThread;
pWinThread
=
AfxBeginThread(ThreadLBProc, NULL);
::Sleep(
500
);
}
UINT ThreadLBProc(LPVOID pParam)
{
return
0
;
}
VC输出的典型提示为:
Detected memory leaks!
Dumping objects ->
thrdcore.cpp(166) : {782} client block at 0x00425300, subtype 0, 112 bytes long.
实际上,只要看到是
thrdcore.cpp(166) 的内存泄漏,基本就是同一个原因,和上面的代码一样。
解决方法:
step 1)
在线程函数中,记得写AfxEndThread();(与AfxBeginThread对应,其他的开始线程的函数,有相应的函数)
step 2)
用::WaitForSingleObject()确保线程彻底退出
step 2是比较容易忽略的,用sleep函数只能侥幸的保证线程退出,但不能确保。