Обновлен.Я боролся с этим весь день, забил свой код и наконец решил вернуться и попробовать что-то немного другое.
Может быть, я неправильно понимаю, но ...
Оба ресурса WindowsМонитор и средство проверки памяти (сторонний инструмент) показывают, что AfxBeginThread
использует память.Если я вызываю тот же класс без создания потока, память остается постоянной.Поскольку это вызывается в цикле, оно со временем становится пассивом.
Я подумал, что, возможно, это было что-то глупое в моем классе, поэтому я создал новый класс, в котором нет ничего, кроме вызова IsBusy()
и запустить его в потоке.Он по-прежнему потребляет память.
Странно то, что ни отладчик VS, ни инструмент проверки памяти не видят потери памяти.Но Windows Resource Monitor достаточно ясно показывает, что использование памяти растет.
Вопрос: Когда поток фактически освобождает память?Это в конце RunImports()
.Или этот поток действительно сохраняется для жизни класса TillBotTimer
?Может быть, в этом и заключается мое предположение о том, как все это очищается, если оно вызывается повторно?
UINT LaunchImportThread(LPVOID lParam)
{
int iReturn=1;
TillBotImport *pTBI = (TillBotImport *)lParam;
return(iReturn);
}
void TillBotTimer::RunImports()
{
CTestThread piPoll;
AfxBeginThread(LaunchImportThread, &piPoll);
while (piPoll.IsBusy()) {
Sleep(0);
ProcessMessages();
}
}