【发布时间】:2011-09-23 05:12:59
【问题描述】:
我查看了我祖先的代码,发现在以下情况下存在泄漏:
1) 启动应用程序
b) 应用启动后,4秒内关闭应用
泄露消息:
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\thrdcore.cpp(306) : {58509} client block at 0x016DFA30, subtype c0, 68 bytes long.
随后,我通过代码,在工作线程的控制功能休眠4秒时找出了可疑的原因。
测试程序:
UINT InitThread(LPVOID pParam)
{
Sleep(4000); //4000 is the default value, it reads from a registry key.
CMyMFCTestProjectDlg* pTest = (CMyMFCTestProjectDlg*)pParam;
pTest->DoSomething();
return 0; //--> Exit thread
}
BOOL CMyMFCTestProjectDlg::OnInitDialog() {
...
AfxBeginThread(InitThread, this);
...
}
如果我减少/删除睡眠计时器,泄漏将得到解决。
但是,我想知道它是如何发生的。是由于工作线程还是 GUI 线程终止? GUI线程后工作线程退出会导致这个问题吗?
任何人都可以通过帮助我解释这一点来振作我的一天吗?我迷路了……
【问题讨论】:
-
这不是睡眠。您需要发布更多代码。包含 Sleep 的线程是做什么的?
-
@Matt H:线程内还有一些其他代码。这是一个“休眠线程”,可以提供延迟执行剩余代码的选项。让我尝试编辑代码...
标签: c++ multithreading mfc memory-leaks