多项目使用同一单例模式导致出现多单例对象

问题场景1:

        在做项目过程中,需要在主工程项目中操作SQLite数据库和插件类工程中也操作数据库,在操作数据库时使用.cpp源代码文件进行操作,并且都用主线程进行数据库操作,但这样做的坏处就是数据库操作是一个耗时的操作,会卡主线程导致界面卡顿。于是进行优化!

优化问题场景1:

        针对场景1问题,将对数据库操作放入到子线程进行操作,但由于在主工程项目中open了该数据库,在插件工程项目中再次open数据库进行了报错。

        查阅资料得知:

        QSqlDatabase不能在多个线程对数据库进行open操作,进而导致错误,后继续进行改进。

问题场景2:

        使用单例模式且放到同一子线程进行数据库操作,但出现的问题是,在主工程中GetInstance()没问题,但在子工程中GetInstance时,进入该函数原来的db对象为Null,导致单例模式又重新创建对象,进而该类的数据成员不一致导致出错。 

          查阅资料得知:

        在项目中使用单例模式,在不同项目编译时就确定了单例的地址,多个项目单例地址不同导致错误。

优化问题场景2:

        将数据库操作导出Dll进行多项目调用,这样在Dll编译时单例的地址就定了,从而多项目调用时为同一单例对象。

解决办法参考文章:

        1. 多个动态库引用实例化单例模板类,出现静态变量地址不一致问题_~TMonk~的博客-CSDN博客

2. C++实现 单例模式实例_c++ 单例例子_fanx021的博客-CSDN博客

3. 动态库之间单例模式出现多个实例(Linux)_c++ 一个库多个实例_mjLlm的博客-CSDN博客

你可能感兴趣的:(C++,#,QT学习,数据库,qt,c++,单例模式)