多线程 – 可以取消QFuture并报告进度

前端之家收集整理的这篇文章主要介绍了多线程 – 可以取消QFuture并报告进度前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
QFuture类有一些方法,如cancel(),progressValue()等等.这些可以通过QFutureWatcher来监视.但是,QtConcurrent :: run()的文档读取:

Note that the QFuture returned by
QtConcurrent::run() does not support
canceling,pausing,or progress
reporting. The QFuture returned can
only be used to query for the
running/finished status and the return
value of the function.

我已经看不清楚什么方法实际上可以创建一个可以取消的QFuture,并报告一个长时间运行的操作的进度. (看起来可能是QtConcurrent :: map()和类似的函数可以,但我只有一个单一的,长期运行的方法.)

(对于那些熟悉.NET的人来说,类似于BackgroundWorker类.)

有什么选择可用?

@H_404_18@

解决方法

对于长时间运行的单个任务,QThread可能是您最好的选择.它没有内置的进度报告或取消功能,所以你必须自己滚动.但是为了简单的进度更新,这不是很难.要取消任务,请检查可以从任务循环中调用线程设置的标志.

有一点需要注意的是,如果你重写QThread :: run(),并把你的任务放在那里,那么就不能发出信号,因为QThread对象没有在它所运行的线程内创建,并且你不能将QObject从正在运行的线程.这个issue有一个很好的写作.

@H_404_18@ @H_404_18@

猜你在找的Java相关文章