当前位置: 首页 > news >正文

Qt 的 QSqlDatabase 不能跨线程复用

目录

发生了什么

关键链路(一句话版)

两种修法(选一种即可)

方案 A(推荐):每个采集线程自建 DB 连接

方案 B(更快见效):先让曲线不依赖写库成功

修改后你应看到

极简代码提示


发生了什么

  • 前端每秒拉数据,但模型一直是空的 → 曲线不动。

  • 根因:采集线程里直接用主线程的数据库连接写库,Qt 不允许跨线程复用连接 ⇒ saveToDatabase() 失败 ⇒ 不发 dataCollected ⇒ 模型无数据。

关键链路(一句话版)

DataCollector.onRegistersRead() → 解析 → saveToDatabase()

  • 成功:emit dataCollected(...)(现在只有成功才发)

  • 失败:不发 → 模型空 → 曲线空

两种修法(选一种即可)

方案 A(推荐):每个采集线程自建 DB 连接

  • 新增 DatabaseService::acquireConnection(QString name)

  • DataCollector::run() 里:用线程ID做连接名创建并 open();只在本线程用;退出时 close() + removeDatabase(name)

  • 这样 saveToDatabase() 不再跨线程,能成功,dataCollected 会发出

方案 B(更快见效):先让曲线不依赖写库成功

  • emit dataCollected(dp);

    if (saveToDatabase(dp)) emit dataCollected(dp);
    

    改成

    emit dataCollected(dp);
    asyncSaveToDatabase(dp); // 失败也不影响曲线
    
  • 写库可放到主线程/专用DB线程异步处理。

修改后你应看到

  • 连接成功后按钮变“断开连接”。

  • 日志有“DataCollector: 采集成功”。

  • 曲线逐点更新

极简代码提示

A 方案:

// DataCollector::run()
auto name = QString("conn_%1").arg(reinterpret_cast<quintptr>(QThread::currentThreadId()));
QSqlDatabase db = DatabaseService::instance()->acquireConnection(name);
// ... use db in this thread ...
// on exit:
db.close();
QSqlDatabase::removeDatabase(name);

B 方案:

emit dataCollected(dp);           // 先推模型
QMetaObject::invokeMethod(dbWorker, "save", Qt::QueuedConnection, Q_ARG(DataPoint, dp)); // 异步写库

一句话总结:跨线程复用数据库连接导致写库失败→不发数据→曲线空。要么给采集线程单独建连接(最佳),要么先不把发数依赖写库成功(最快)。

http://www.dtcms.com/a/569694.html

相关文章:

  • Qt-QtCharts
  • 某番切小说畅听红果等提示“低版本不安全”的解决方案
  • 昆明网站seo技术厂家网站设计远程培训
  • Linux基本架构
  • 任务调度框架:PowerJob、XXL-Job、OpenJob
  • 做模型挣钱的网站wordpress中英文切换
  • TensorFlow Keras
  • 萧山做网站的企业wordpress集成关注公众和登陆
  • 详解EtherNet/IP转CAN边缘计算网关:基恩士PLC与CAN IO卡通讯配置步骤
  • 网站权重的提升河北网站制作多少钱
  • .net实现redis下单超卖(jmeter高并发测试)(自己记录用)
  • 全自动壁纸采集源码
  • 公司用员工信息做网站域名备案网站建站描述撰写
  • Python类中方法种类介绍
  • AI研究:大语言模型(LLMs)需要怎样的硬件算力
  • 贵阳网站建设方案报价查企业资质上什么网站
  • Parasoft C/C++test中Trace32调试器的配置与单元测试执行
  • 基于大语言模型(LLM)的多智能体应用的新型服务框架——Tokencake
  • 单元测试(TestNG+PowerMock)
  • 哪家公司网站建设好点襄樊网站建设哪家好
  • 公司网站做推广预装wordpress主机
  • CSS 文本和字体属性、列表属性
  • 网站布局结构图百度关键词排名销售
  • 小兔自助建站设计网站做海报
  • Camera成像原理
  • QuickMagicApi
  • 海洋承德网站建设公司店铺推广语
  • elasticsearch学习笔记-02
  • 构建一个自主深度思考的RAG管道以解决复杂查询--创建多阶段检索漏斗(5)
  • 网站开发方案 文档视频网站设计论文