Утечка памяти с AfxBeginThread - PullRequest
0 голосов
/ 29 июня 2019

Обновлен.Я боролся с этим весь день, забил свой код и наконец решил вернуться и попробовать что-то немного другое.

Может быть, я неправильно понимаю, но ...

Оба ресурса 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();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...