類似的問(wèn)題見(jiàn)http://www.experts-exchange.com/Programming/Programming_Languages/MFC/Q_20084406.html
下面的代碼,當(dāng)用AfxBeginThread開(kāi)始一個(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輸出的典型提示為:{
??CWinThread? * pWinThread;?
??pWinThread? = ?AfxBeginThread(ThreadLBProc,?NULL);
??::Sleep( 500 );
}
UINT?ThreadLBProc(LPVOID?pParam)
{
?? return ? 0 ;
}
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對(duì)應(yīng),其他的開(kāi)始線程的函數(shù),有相應(yīng)的函數(shù))
step 2)
用::WaitForSingleObject()確保線程徹底退出
step 2是比較容易忽略的,用sleep函數(shù)只能僥幸的保證線程退出,但不能確保。