我有一些任务,从QtConcurrent::run()
. 任务有QFutureWatcher
。我知道QFutureWatcher
只能观看一个Future,但是当我从 UI 启动相同的任务时,如何在每个任务上创建 `QFutureWatcher*?是吗 :
QFutureWatcher<void> *watcher = new QFutureWatcher;
watcher->setFuture(future);
QVector<QFutureWatcher<void>*> watchers;
watchers.push_back(watcher); // vector with pointers to each tasks watchers
或者是其他东西?
* 我的麻烦是我从我的代码开始每个任务,但任务是使用外部 DLL 函数执行的。而且我没有 API 来停止任务。QFutureWatcher
在我收到完成信号后,我只能等待任务结束并关闭任务并释放所有相关数据。
此时,我使用了两个 QFutureWatchers - 一个正在观看第一个运行的任务,另一个 - 如果第一个任务没有结束则启动,并使用临时观察者和临时槽观察第二个任务(代码相同,我创建它只是为了接收另一个观察者带有相关数据的信号),直到第一个任务结束。它观看了相同的代码,但我必须复制它以等待第一个任务结束,因为QFutureWatcher
没有完成信号的队列和相关的 watcher.result()`s ..
1) Qt 有任何队列任务机制吗?或者我怎样才能捕捉到多个任务的未来?
2)QtConcurrent::run
没有 cancel() 插槽。我可以对一个序列项使用映射/映射函数吗?映射 API 是否已排队处理任务/已完成信号?我怎么能意识到这一点?谢谢!