多线程 – 可以取消QFuture并报告进度
QFuture类有一些方法,如cancel(),progressValue()等等.这些可以通过QFutureWatcher来监视.但是,QtConcurrent :: run()的文档读取:
我已经看不清楚什么方法实际上可以创建一个可以取消的QFuture,并报告一个长时间运行的操作的进度. (看起来可能是QtConcurrent :: map()和类似的函数可以,但我只有一个单一的,长期运行的方法.) (对于那些熟悉.NET的人来说,类似于BackgroundWorker类.) 有什么选择可用? 解决方法
对于长时间运行的单个任务,
QThread 可能是您最好的选择.它没有内置的进度报告或取消功能,所以你必须自己滚动.但是为了简单的进度更新,这不是很难.要取消任务,请检查可以从任务循环中调用线程设置的标志.
有一点需要注意的是,如果你重写QThread :: run(),并把你的任务放在那里,那么就不能发出信号,因为QThread对象没有在它所运行的线程内创建,并且你不能将QObject从正在运行的线程.这个issue有一个很好的写作. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |