我有完美的代码:
while(true)
{
Job job = provider.NextJob();
if (job.get() == NULL)
{
Result jobResult = job.Run();
provider.ProcessJobResult(jobResult);
}
else
break;
}
我重新实现它:(最初有几个线程,但单个线程仍然表明问题)
JobProvider provider;
Concurrency::task_group taskGroup;
std::function<void ()> processingJob = [&provider, &taskGroup, &processingJob]
{
Job job = provider.NextJob();
if (job.get() == NULL)
{
Result jobResult = job.Run();
provider.ProcessJobResult(jobResult);
taskGroup.run(jobCode);
}
};
taskGroup.run(jobCode);
taskGroup.wait();
此代码在一段时间后由于没有内存而崩溃。 分析我使用的内存空间:
_CrtDumpMemoryLeaks()
中的crtdbg.h
- 如果作业数量足够小,可以让应用程序完成并退出,则表明没有泄漏。红色表示承诺,黄色保留和绿色,完全消耗,意味着免费。
taskGroup
创建的线程不会清除保留的内存。谁能说出原因?