c++ - 在 QtConcurrent::run 中使用 QSqlDatabase 连接(伪连接池)

标签 c++ sql qt asynchronous database-connection

我正试图找到一种有效的方法来处理 Qt 中的某些数据库查询。该场景本质上是我们有许多事件需要写入数据库。我们不能在写入时阻塞主线程,因此这些写入是使用 QtConcurrent::run 在单独的线程中完成的。

现在的问题是,目前每个并发运行都需要创建一个新的数据库连接。我们希望能够简单地创建一次连接并重用它,但是 Qt 文档声明连接只能在创建它的线程中使用。使用 QtConcurrent 会带来很大的问题,因为我们不知道我们将在哪个线程中运行。

请注意,我们对并行写入数据库没有兴趣,也就是说,我们可以施加一次只有一个线程使用数据库连接的限制。

有没有办法在使用一个数据库连接的同时仍然使用 QtConcurrent?还是像我担心的那样,我们必须使用 QThread 并实现我们自己的信号而不是使用并发框架?


答案:正如我所怀疑的那样,答案似乎表明这是不可能完成的。 QtConcurrent 和 DB 连接不能很好地协同工作。这实在是太糟糕了。我想我会回去创建我自己的线程并使用自定义信号和插槽进行通信。

最佳答案

这篇文章对我帮助很大Asynchronous Database Access with Qt 4.x . 我认为在线程中构建一个工作对象并使用排队连接调用它的槽,比驱动新事件并将它们发布到线程要好。您可以从 this link. 下载示例文件。

关于c++ - 在 QtConcurrent::run 中使用 QSqlDatabase 连接(伪连接池),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7785766/

相关文章:

sql - 将它们之间的类型和纯函数(使用类似 ML 或类似 Haskell 的语言)编译为 SQL

c++ - Windeployqt 无法运行, "Access is denied."

c++ - 隐藏在中央小部件下的小部件

c++ - Qt:QTabWidget 不响应点击

c++ - 如何避免转换函数中的复制构造函数?

c++ - C++ 中的函数指针数组

c++ - 具有动态分配结构数组元素的动态分配结构数组

SQL 约束或条件

sql - 如何在 SQL 数据库上使用 dplyr `distinct()` 函数?

c++ - 外部 "C": What does and what doesn't need it?