類似的問題見http://www.experts-exchange.com/Programming/Programming_Languages/MFC/Q_20084406.html
下面的代碼,當(dāng)用AfxBeginThread開始一個(gè)線程時(shí),實(shí)際上是有內(nèi)存泄漏的
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.
實(shí)際上,只要看到是
thrdcore.cpp(166) 的內(nèi)存泄漏,基本就是同一個(gè)原因,和上面的代碼一樣。
解決方法:
step 1)
在線程函數(shù)中,記得寫AfxEndThread();(與AfxBeginThread對應(yīng),其他的開始線程的函數(shù),有相應(yīng)的函數(shù))
step 2)
用::WaitForSingleObject()確保線程徹底退出
step 2是比較容易忽略的,用sleep函數(shù)只能僥幸的保證線程退出,但不能確保。