ACE 开发者
文章
日志
文件
圈子
论坛
业内新闻
意见建议
求职招聘
.Net技术
项目管理经验交流
常用工具
IBM Rational
敏捷技术
数据库
中间件
P2P技术
服务器端程序开发
Tcp/IP和Socket
C++学习
开发心得和读书笔记
ACE综合应用
ACE基础应用
海阔天空
您的位置:
ACE 开发者
>>
论坛
>>
开发心得和读书笔记
>>
查看帖子
字体:
小
中
大
客户端软件,小心使用ACE_Singleton
peakzhang 发表于: 2008-7-15 23:49 来源:
ACE 开发者
近日使用ACE开发了客户端软件,测试出现一个重入的BUG,客户端注销后,再次进入会导致状态错误。经过跟踪分析发现,是使用ACE_Singleton引起的。
因为ACE_Singleton使用非常便利,在程序里面使用了多个,但因为它是系统管理的,在注销后,这个对象无法释放,导致状态全部错误。改成ACE_Unmanaged_Singleton,自己管理对象的生命期就好了。
请大家注意别犯类似错误啊。
最新回复
peakzhang at 2008-7-15 23:49:41
还有另外一个需要注意的事情 - 线程同步如果客户端需要反复调用你用ACE开发的组件,千万注意线程同步。
比如客户端的进入和退出,都调用了ACE的功能,而这个进入退出时间间隔很短,甚至迅速发生,一定要注意里面的线程要保证同步,该退出的退出。否则因为OS调度的缘故,很可能造成很奇怪的错误,其实都是线程不同步带来的。
wishel at 2008-8-12 15:48:05
客户端注销时,进程没退出么,如果进程结束的话就会释放singleton。如果要在进程不退出的情况下反复登录注销并使用同一singleton,需要每个客户端登录时重置(重新初始化)下该singleton。
singleton的语义就是与整个进程同生命周期的,如果每次客户端登陆都新生成一次,注销时再释放一次,就不符合singleton的语义了。
winston at 2008-8-12 16:43:41
认可。
查看全部回复
我也来说两句
最新更新主题
ACE学习总结,多交流
转--配置开发支持高并发TCP连接的Linux...
转--一个解除TCP连接的TIME_WAIT状态限...
转 - ACE的陷阱
转 内网的IP地址判断
VC++两个经典问题解决方案
字符串转换 - 应该熟练掌握的东西...
推荐一个博客 - http://blog.csdn.net/...
what's the difference between async ...
单体中的锁
月度关注热点
ACE学习总结,多交流
最新回复
比如客户端的进入和退出,都调用了ACE的功能,而这个进入退出时间间隔很短,甚至迅速发生,一定要注意里面的线程要保证同步,该退出的退出。否则因为OS调度的缘故,很可能造成很奇怪的错误,其实都是线程不同步带来的。
singleton的语义就是与整个进程同生命周期的,如果每次客户端登陆都新生成一次,注销时再释放一次,就不符合singleton的语义了。