当正在观看的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_futureWatcher1
和m_futureWatcher1
,而不是列表,然后像下面这样在handleFinished
插槽中检查它们:if (m_futureWatcher1->isFinished() && m_futureWatcher2->isFinished) {
...
}