gpt4 book ai didi

c++ - 在循环中正确使用 QThread

转载 作者:太空宇宙 更新时间:2023-11-04 15:55:29 25 4
gpt4 key购买 nike

我正在尝试更深入地了解 QThread,但感觉我确实没有在循环中正确使用它。

我有一些耗时的计算需要运行几次。我正在尝试以下(简化示例):

for(int i = 0; i < 100; ++i)
{
worker *task = new worker();

connect(task, &worker::finished, this, &controller::calcFinished);
connect(task, &worker::resultReady, this, &controller::handleResult);
task->start();
}

run() 函数如下所示:

variable = 0;

for(int i = 0; i < 5000; ++i)
{
for(int j = 0; j < 500; ++j)
{
for(int k = 0; k < 500; k++)
{
++variable;
}
}
}

emit resultReady(variable);

有了这个我有几个问题:

  • 如何避免启动太多线程?例如。如果我想将它的数量限制为 QThread::idealThreadCount()。
  • 如何检查每个线程是否完成?
  • 如何避免代码泄露?

我已经尝试过 QThreadPool,它似乎是解决我的问题的方法,但是从那里我无法收集线程中的计算结果。也许我错过了什么?

一些补充说明:目前我正在使用重新实现 run() 函数的方法。我也尝试过 moveToThread() 方法,但我更迷茫了。因此,如果那是解决方案,有些人可以尝试向我解释它是如何工作的。我正在检查 Qt 的文档:https://doc.qt.io/qt-5/qthread.html但是在这里,我觉得示例中甚至缺少“操作”信号的发射(否则为什么需要连接它?)

提前感谢您的回答!

最佳答案

使用 Qt Concurrent 框架中的 QtConcurrent::run()

extern int aFunction();
QThreadPool pool;
QFuture<int> future = QtConcurrent::run(&pool, aFunction);

然后您可以从 future 对象中检索结果

int result = future.result();

关于c++ - 在循环中正确使用 QThread,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58942753/

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