找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 3684|回复: 1

ACE的初始化和关闭问题

[复制链接]
发表于 2009-3-28 20:08:02 | 显示全部楼层 |阅读模式
问一下,我在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()都会出现上面的问题。

很是头疼啊。
发表于 2009-3-29 10:26:41 | 显示全部楼层
可能是生命周期不一致导致的问题,
可能因为exe的生命周期结束了的时候,
释放其申请的全局空间,但是dll的生命周期还在,
因此exe结束的时候,顺手帮DLL自动释放掉其内部单件的东西,
这显然会导致错误。

dll中使用单件模式,
书上建议说使用ACE_Unmanaged_Singleton,
由自己选择合适的时机,显示调用close函数主动释放,
实际中我也是这么用的,未见出什么问题。
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-12-23 21:29 , Processed in 0.019407 second(s), 6 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表