已更新。我整天都在苦苦挣扎,但我保留了代码,最后决定回去尝试一些不同的东西。
也许我误会了,但是...
Windows资源监视器和内存验证器(第三方工具)均指示AfxBeginThread
正在消耗内存。如果我在不创建线程的情况下调用同一类,则内存将保持不变。因为这是周期性的,所以随着时间的流逝,它变成了一种责任。
我以为这可能是我班上的一门课,所以我创建了一个新班,除了对IsBusy()
的调用外,其他所有内容都没有,并使其在线程中启动。它仍然会消耗内存。
奇怪的是,VS调试器或Memory Validator工具都看不到任何内存丢失。但是Windows资源监视器很清楚内存使用量正在增加。
问题:线程何时真正释放内存?是在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();
}
}