加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-14 19:28:12 所属栏目:Java 来源:网络整理
导读:QFuture类有一些方法,如cancel(),progressValue()等等.这些可以通过QFutureWatcher来监视.但是,QtConcurrent :: run()的文档读取: Note that the QFuture returned by QtConcurrent::run() does not support canceling,pausing,or progress reporting. The
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类.)

有什么选择可用?

解决方法

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读