问题场景1:
在做项目过程中,需要在主工程项目中操作SQLite数据库和插件类工程中也操作数据库,在操作数据库时使用.cpp源代码文件进行操作,并且都用主线程进行数据库操作,但这样做的坏处就是数据库操作是一个耗时的操作,会卡主线程导致界面卡顿。于是进行优化!
优化问题场景1:
针对场景1问题,将对数据库操作放入到子线程进行操作,但由于在主工程项目中open了该数据库,在插件工程项目中再次open数据库进行了报错。
查阅资料得知:
QSqlDatabase不能在多个线程对数据库进行open操作,进而导致错误,后继续进行改进。
问题场景2:
使用单例模式且放到同一子线程进行数据库操作,但出现的问题是,在主工程中GetInstance()没问题,但在子工程中GetInstance时,进入该函数原来的db对象为Null,导致单例模式又重新创建对象,进而该类的数据成员不一致导致出错。
查阅资料得知:
在项目中使用单例模式,在不同项目编译时就确定了单例的地址,多个项目单例地址不同导致错误。
优化问题场景2:
将数据库操作导出Dll进行多项目调用,这样在Dll编译时单例的地址就定了,从而多项目调用时为同一单例对象。
解决办法参考文章:
1. 多个动态库引用实例化单例模板类,出现静态变量地址不一致问题_~TMonk~的博客-优快云博客