Я заглянул в код своего предка и обнаружил утечку в следующей ситуации:
1) Запуск приложение
б) После запуска приложения закройте приложение в течение 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);
...
}
Если я уменьшу / уберу таймер сна, утечка будет устранена.
Однако хотелось бы знать, как это происходит. Либо из-за рабочего потока, либо из-за завершения потока графического интерфейса? Будет ли рабочий поток завершен после того, как поток графического интерфейса вызовет эту проблему?
Кто-нибудь может поднять мне настроение, помогая мне это объяснить? Я заблудился ....