Сон в потоке вызывает память утечка

Я заглянул в код своего предка и обнаружил утечку в следующей ситуации:

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);
...
}

Если я уменьшу / уберу таймер сна, утечка будет устранена.
Однако хотелось бы знать, как это происходит. Либо из-за рабочего потока, либо из-за завершения потока графического интерфейса? Будет ли рабочий поток завершен после того, как поток графического интерфейса вызовет эту проблему?

Кто-нибудь может поднять мне настроение, помогая мне это объяснить? Я заблудился ....

6
задан wengseng 27 June 2011 в 03:45
поделиться