我的混合模式MFC应用程序正在创建错误的内存泄漏,因为在MFC dll关闭之前CRT没有时间关闭。混合模式C++/CLI应用程序没有正确关闭CLR
我有一个非常简单的小应用程序,显示问题:
#include <windows.h>
#include <iostream>
struct LongTimeToDestroy
{
~LongTimeToDestroy()
{
std::cout << "Will get called!" << std::endl;
Sleep(3000);
std::cout << "Won't get called!" << std::endl;
}
};
LongTimeToDestroy gJamsUpTheCRT;
int main()
{
}
编译cl.exe /clr test.cpp
。在运行时,你会得到:
Will get called!
问题的症结是:gJamsUpTheCRT
之前,宣称任何静态/全局变量不会被释放。例如,在我的情况下,MFC CWinApp派生的类不会被清理。
这是预期的行为?我想让我的应用完全关闭。
感谢,
Porges链接中提供的Joe Duffy链接指出:“虽然可配置,但默认情况下CLR会让终结器运行2秒”。你知道如何配置这个吗? – Cechner 2012-04-19 00:52:10
否。除了自己托管CLR,也许。实际上,当你的终结者已经烧掉了50亿个CPU周期并且没有完成工作,那么增加一些更不可能带来救济。 – 2012-04-19 01:10:00