ACE的初始化和关闭问题
问一下,我在DLL中使用了Singleton,它所管理的那个类SysController的析构函数还会用到ACE_TRACE以及消息队列来关闭另外一个线程。然后在一个以ACE_TMAIN为入口的Win32 Console Applicatoin中使用这个DLL,可是总在程序结束的时候,当执行到SysController的析构函数时,就在ACE_TRACE时出错了。似乎这时候ACE_TRACE已经不能用了,为什么会这样呢?看调用堆栈,是在一个ACE_Main对象的析构函数中调用到SysController的析构函数。
之前用的main函数为入口的一个exe程序倒是没问题的啊,在那个调用中,我显式的调用个ACE::Init() 和ACE::Fini(),而在这个以ACE_TMAIN为入口的Win32 Console Applicatoin中不管是否显式地调用ACE::Init()和ACE::Fini()都会出现上面的问题。
很是头疼啊。 可能是生命周期不一致导致的问题,
可能因为exe的生命周期结束了的时候,
释放其申请的全局空间,但是dll的生命周期还在,
因此exe结束的时候,顺手帮DLL自动释放掉其内部单件的东西,
这显然会导致错误。
dll中使用单件模式,
书上建议说使用ACE_Unmanaged_Singleton,
由自己选择合适的时机,显示调用close函数主动释放,
实际中我也是这么用的,未见出什么问题。
页:
[1]