由于单例和static在内存中的存放位置不一样,而有些应用不管是使用单例还是使用static都是为了共用某个成员,如果混合使用,比如单例里面又使用了static,就会导致某些成员不能保持一致。
最好的解决方案是如果使用了单例,那么单例里成员就不要再使用static,也不要使用static的全局变量。但是如果我设计这个class时还不确定是否使用单例,那可以使用static,只是单例时不使用这个static成员即可。
原有流程:
<!--[if gte mso 9]><xml> <o:OLEObject Type="Embed" ProgID="Visio.Drawing.11" ShapeID="_x0000_i1025" DrawAspect="Content" ObjectID="_1437833746"> </o:OLEObject> </xml><![endif]-->
改造后流程:
<!--[if gte mso 9]><xml> <o:OLEObject Type="Embed" ProgID="Visio.Drawing.11" ShapeID="_x0000_i1026" DrawAspect="Content" ObjectID="_1437833748"> </o:OLEObject> </xml><![endif]-->
DetailbillMgr.h,增加成员变量m_AltibaseIntf
classDetailbillMgr
{
public:
DetailbillMgr()
{
m_AltibaseIntf = NULL;
}
protected:// 改为private
abdb::AltibaseIntf * m_AltibaseIntf;
};
DetailbillMgr.cpp,原来abdbi指向一个static的AltibaseIntf,改为指向DetailbillMgr的成员变量
abdb::AltibaseIntf * abdbi;
if(m_AltibaseIntf==NULL)
{
m_AltibaseIntf = new abdb::AltibaseIntf;
}
m_AltibaseIntf = abdb::connectAltibase(m_AltibaseIntf);
abdbi = m_AltibaseIntf;
改造前:
abdb::AltibaseIntf * abdbi = abdb::AltibaseIntf::getInstance();
abdbi = abdb::connectAltibase(abdbi);
AltibaseIntf.h,AltibaseIntf增加成员变量curTimeStamp,取代原有的static全局变量
classAltibaseIntf {
public:
stringcurTimeStamp;
};
AcctConnection.cpp,把原有的static变量curTimeStamp注释掉,采用新加的成员变量curTimeStamp
//当前时间戳
//static string curTimeStamp("");
if(handle->curTimeStamp < timeStamp)
{
handle->disConnect();
handle->setConnInfo(abdbUser, abdbPassWd, abdbDsn, abdbPort);
handle->connect();
handle->curTimeStamp = timeStamp;
}
改造后,用tuxedo单个测试,调用了5次没问题,第一次连接数据库,后面四次都不连接数据库。
用批量并发测试,tuxedo进程自增长后不报错,降落后也不报错。
相关推荐
如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。 1、书写步骤 1)、创建类方法,返回对象实例.以shared default current开头。 2)、创建一个全局变量用来保存对象的引用 3)、判断对象是否...
首先,在你的解决方案中,适当的目录中新建一个类,比如 LogManager: 编写如下代码: /// /// 日志管理 /// public class LogManager { private string _logDir; // 日志文件存放目录 private static ...
之道 》,其中很多观点我看了很受启发,以前我也将"设计模式" 看成一个简单的解决方案,没有从一种高度来看待"设计模式"在软 件中地位,下面是我自己的一些想法: 建筑和软件某些地方是可以来比喻的 特别是中国传统建筑...
解决方案: 1)采用对象序列化和反序列化技术。 2)将全部账户信息采用对象序列化的方式存放在文件中。 提示: 1) 使用文件来保存各种账户的信息,将注册、存款、取款、转账、修改之后的信息要及时的保存到文件中...
在实现中,assertion就是在程序中的一条语句,它对一个boolean表达式进行检查,一个正确程序必须保证这个boolean表达式的值为true;如果该值为false,说明程序已经处于不正确的状态下,系统将给出警告或退出。...
在实现中,assertion就是在程序中的一条语句,它对一个boolean表达式进行检查,一个正确程序必须保证这个boolean表达式的值为true;如果该值为false,说明程序已经处于不正确的状态下,系统将给出警告或退出。...
并发问题解决方案 59 71.7. Hibernate是如何延迟加载? 60 71.8. Hibernate中怎样实现类之间的关系?(如:一对多、多对多的关系) 60 71.9. 说下Hibernate的缓存机制 60 71.10. Hibernate的查询方式 60 71.11. 如何...
每个实例都经作者精心筛选,具有很强的实用性,其中一些实例是开发人员难于寻觅的解决方案。 本书适合PHP的初学者,如高校学生、求职人员作为练习、速查、学习使用,也适合PHP程序员参考、查阅。 目 录 目录:...
每个实例都经作者精心筛选,具有很强的实用性,其中一些实例是开发人员难于寻觅的解决方案。 本书适合PHP的初学者,如高校学生、求职人员作为练习、速查、学习使用,也适合PHP程序员参考、查阅。 目 录 目录:...
180多页面试题,前前后后不间断的更新了...【Dubbo】dubbo使用中遇到的问题 174 【Zookeeper】zookeeper介绍 178 1、简介 178 2、基本概念 179 3. ZooKeeper典型应用场景 183 4、ZooKeeper在大型分布式系统中的应用 189
11_二义性和虚继承解决方案 12_中午课程回顾 13_多继承原理抛砖_传智扫地僧 14_多态思想引言 15_类型兼容性原则遇上还是函数重写_面向对象新需求_传智扫地僧 16_多态案例_多态的意义_多态成立的三个条件_传智扫地僧 ...