当正在观看的QFutureWatcher完成时,finished()类将发出信号QFuture
如何观看多个QFuture
我正在使用QtConcurrent::run()并行运行两个线程,并且想在两个线程完成时得到一个信号。

最佳答案

我会这样处理:

  • 根据需要创建尽可能多的QFutureWatcher
  • 将所有QFutureWatcher添加到列表中。 vector ,例如m_futureWatchers:
     m_futureWatchers.append(futureWatcher);
    
  • QFutureWatcher::finished信号连接到同一插槽,例如handleFinished:
     connect(futureWatcher, &QFutureWatcher<int>::finished, this, MyClass::handleFinished);
    
  • handleFinished插槽中,检查QFutureWatcher::isFinished并做出相应的反应:
     bool allAreFinished = true;
    
     for (auto *futureWatcher : m_futureWatchers)
         allAreFinished &= futureWatcher->isFinished();
    
     if (allAreFinished) {
         // doSomething
     }
    

  • 注意:对于仅两个将来的观察者,拥有两个成员变量可能会更容易,例如m_futureWatcher1m_futureWatcher1,而不是列表,然后像下面这样在handleFinished插槽中检查它们:
    if (m_futureWatcher1->isFinished() && m_futureWatcher2->isFinished) {
        ...
    }
    

    08-17 04:19