gpt4 book ai didi

c++ - 不同线程中的 qt 同时 MySQL 查询 = 崩溃

转载 作者:行者123 更新时间:2023-11-29 05:23:11 26 4
gpt4 key购买 nike

我有一个用 C++ 编写的多线程 Qt5 应用程序,其中每个线程都写入同一个数据库。

我跨线程共享同一个数据库 QSqlDatabase 变量,但每个线程都创建自己的查询。我经常遇到崩溃,我在崩溃时捕获了以下信息:

Driver error [QMYSQL3: Unable to store statement results]
Database error [Commands out of sync; you can't run this command now]
Type [2]
Number [2014]

首先,我可以在多个线程中同时进行 MySQL 查询吗?如果是这样,我是否需要使用互斥体来保护 SQL 调用?或者我需要发布更多信息....


更新:我有一个单独的 DBManager 线程,它处理打开/关闭数据库和简单的数据库写入。我这样做是因为我的数据库经常脱机,而且我不希望其他线程在数据库打开失败时挂起长达 2 分钟。不,我有更多的线程做报告,并且必须从数据库中检索大量数据。

如下所述,不允许跨线程共享数据库句柄。所以现在也许这更像是一个设计问题——处理这种情况的最佳方法是什么?我不希望每个执行数据库访问的线程都尝试自己打开并等待 2 分钟以防数据库离线

最佳答案

阅读 SQL 模块的文档,特别是 threads section这表明每个连接只能在创建它的线程中使用。

因此添加互斥锁还不够好,您将不得不在每个线程中创建一个新的连接对象,或者将所需的数据传入/传出执行所有数据库查询的专用线程。

关于c++ - 不同线程中的 qt 同时 MySQL 查询 = 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23201320/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com