類似的問題見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函數只能僥幸的保證線程退出,但不能確保。