c++ - 在Qt中为数据库创建线程: a reasonnable design or nonsense?

标签 c++ multithreading qt

我尝试使用 Qt 设计的应用程序是数据密集型的;它本质上是一个数据库。我正在寻找一种能让我保持 UI react 性的设计。我的猜测是我应该只在主线程中保留 UI 并为数据库创建一个线程。
但是:
- 创建一个继承自 QThread 的数据库对象似乎不是一个自然的设计(run() 会是什么?)
- 我假设我需要使用信号和槽进行 UI/核心交互;然而这个功能在 Qt 中似乎是相对较新的,所以我想知道我的“设计”是否错误。
- QObject 后代显然被设计为存在于创建它们的线程中,因此我担心模型(从数据库线程)到 UI 线程的通信将会出现问题。

感谢您的评论。

最佳答案

您可以考虑使用QtConcurrent::run() 。您将传入您想要的函数。它会关闭一个线程来运行该函数并给你一个 QFuture您可以使用它来获得最终结果。您可以轮询 QFuture 以查看它是否 isFinished()。然而,更好的方法可能是使用 QFutureWatcher它会为您监视 QFuture 并在完成时发出信号。请参阅 QFutureWatcher 中的示例代码简介。

关于c++ - 在Qt中为数据库创建线程: a reasonnable design or nonsense?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6737260/

相关文章:

c++ - 如何知道何时单击组合框的向下箭头?

r - 为什么foreach%dopar%随每个其他节点变慢?

c++ - 列出将所有 setter 函数作为 Qt 中的 SLOTS 的缺点(性能/维护等)?

c++ - 为什么我的 cpp 数组大小是 4 的倍数?

java - 如何使用 SWIG 在 Java 和 C++ 之间传递多维数组?

C++11 std::thread join 在 Xcode 6 上因 system_error 异常和 SIGABRT 而崩溃?

c++ - Q_IMPORT_PLUGIN,我可以使用多少次?

c++ - 将 QVariant 转换为 QVector<int>

c++ - boost daytime7 服务器示例不响应 netcat 客户端

android - 如何在特定时间启动服务