【问题标题】:Interrogate QSqlQuery on another thread在另一个线程上询问 QSqlQuery
【发布时间】:2017-09-27 15:17:24
【问题描述】:

您能否在连接/执行的线程以外的线程上询问 QSqlQuery(例如 query.value)?

【问题讨论】:

  • 你试过了吗?试试看,告诉我们您的体验。
  • 我没试过,但我想试试。代码是多线程的,它可能需要一些时间才能随机崩溃,我更好奇 QSqlQuery 架构是否支持它

标签: c++ multithreading qt qsqlquery


【解决方案1】:

根据Qt docs,这是支持的:

只能在创建它的线程中使用连接。 在线程之间移动连接或从 不支持不同的线程。

另外,QSqlDrivers 使用的第三方库可以 对在多线程中使用 SQL 模块施加进一步的限制 程序。有关更多信息,请参阅数据库客户端的手册 信息

因此,您至少必须为要从中运行查询的每个线程add a new database connection(具有唯一名称)。

【讨论】:

  • 我指的是QSqlQuery执行后的用法。它会缓存整个结果吗?如果我只是浏览记录并读取所有值,它是否使用连接?
  • @PascalauRazvan。那么您是在问是否可以在线程之间传递一个活动的QSqlQuery 对象?你想通过这样做解决什么问题?您是否希望以某种方式避免将所有结果发送回主线程?
  • @ekhumoro 我不想在创建数据库连接的同一个线程上解析结果(我已经将访问序列化为一个线程而不是多个连接) .是的,我想知道我是否可以在调用者线程上使用该活动的 QSqlQuery。
  • @PascalauRazvan。我认为这可能是可能的,但我自己没有尝试过。不幸的是,尽管进行了很多搜索,我还是找不到任何关于它是否被明确支持的官方 Qt 声明。这似乎不是经常做的事情。我已经看到一些提示,在不同的线程中迭代结果应该没问题 - 但没有什么真正具体的。所以看起来你必须找到一种方法来自己试验它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-22
  • 1970-01-01
  • 1970-01-01
  • 2014-08-21
  • 1970-01-01
相关资源
最近更新 更多