多线程退出,内存泄漏
本项目是多线程处理的,正常退出(用控件控制停止向线程往界面报告状态,然后把再点击关闭)是没有问题的。如果其他线程还一直在向界面报告状态(GetItemText、SetItemText)的话,此时点击右上角的关闭,就会造成内存泄漏。
现在我测试了一下,发现往界面报告状态的线程无法退出(停在GetItemText、SetItemText函数上),我重写了OnClose,在里面等待其他线程执行完退出,但一直没能退出。
:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(156) : {278780} normal block at 0x02AC4428, 273 bytes long.
Data: <T vQ > 54 CD 76 51 02 00 00 00 00 01 00 00 01 00 00 00
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(156) : {278774} normal block at 0x02AC43D8, 20 bytes long.
Data: <T vQ > 54 CD 76 51 03 00 00 00 03 00 00 00 01 00 00 00
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(156) : {278771} normal block at 0x02AC4380, 21 bytes long.
Data: <T vQ > 54 CD 76 51 04 00 00 00 04 00 00 00 02 00 00 00
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(156) : {278770} normal block at 0x02AC4330, 19 bytes long.
Data: <T vQ > 54 CD 76 51 02 00 00 00 02 00 00 00 02 00 00 00
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(156) : {278769} normal block at 0x02AC42E0, 19 bytes long.
Data: <T vQ > 54 CD 76 51 02 00 00 00 02 00 00 00 02 00 00 00
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(156) : {278768} normal block at 0x02AC4290, 19 bytes long.
Data: <T vQ > 54 CD 76 51 02 00 00 00 02 00 00 00 02 00 00 00
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(156) : {278767} normal block at 0x02AC4240, 19 bytes long.
Data: <T vQ > 54 CD 76 51 02 00 00 00 02 00 00 00 02 00 00 00
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(156) : {278766} normal block at 0x02AC41F0, 19 bytes long.
Data: <T vQ > 54 CD 76 51 02 00 00 00 02 00 00 00 02 00 00 00
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(156) : {278765} normal block at 0x02AC41A0, 19 bytes long.
Data: <T vQ > 54 CD 76 51 02 00 00 00 02 00 00 00 02 00 00 00
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(156) : {278764} normal block at 0x02AC4150, 19 bytes long.
Data: <T vQ > 54 CD 76 51 02 00 00 00 02 00 00 00 02 00 00 00
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(156) : {278763} normal block at 0x02AC4100, 19 bytes long.
Data: <T vQ > 54 CD 76 51 02 00 00 00 02 00 00 00 02 00 00 00
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(156) : {278762} normal block at 0x02AC40B0, 20 bytes long.
Data: <T vQ > 54 CD 76 51 03 00 00 00 03 00 00 00 02 00 00 00
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(156) : {278761} normal block at 0x02AC4060, 18 bytes long.
Data: <T vQ > 54 CD 76 51 01 00 00 00 01 00 00 00 02 00 00 00
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(156) : {278760} normal block at 0x02AC3F60, 23 bytes long.
Data: <T vQ > 54 CD 76 51 06 00 00 00 06 00 00 00 02 00 00 00
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(156) : {278759} normal block at 0x02AC3F10, 19 bytes long.
Data: <T vQ > 54 CD 76 51 02 00 00 00 02 00 00 00 02 00 00 00
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(188) : {278758} normal block at 0x02AC4000, 30 bytes long.
Data: <T vQ > 54 CD 76 51 0C 00 00 00 0D 00 00 00 03 00 00 00
{838} client block at 0x001DE180, subtype c0, 212 bytes long.
点击了右上角的关闭之后,主线程是怎样处理的呢?为什么用GetItemText、SetItemText都执行不了,无法继续下去。
我应该怎样解决这个问题呢?