【发布时间】:2014-04-21 16:23:02
【问题描述】:
我有一个用 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 分钟以防数据库脱机
【问题讨论】:
标签: c++ mysql multithreading qt