openKylin论坛

 找回密码

新手入门系列一 Qt多线程之QtConcurrent::run() [复制链接]

开发工具:QtCreator
系统环境:Ubuntu 16.04
软件名称:qtconcurrent-run
源码地址:https://github.com/eightplus/examples/tree/master/code/Qt/thread/qtconcurrent-run-demo
开发者主页:https://eightplus.github.io/

QtConcurrent是一个名字空间, 包含了众多的高级API, 方便用户编写多线程程序,且不需要使用低级线程原语(如:互斥、读写锁、等待条件或信号量)。QtConcurrent返回一个QFuture对象(QFuture类没有继承QObject,该类代表了一个异步调用的结果,它介于QtConcurrent和QFutureWatcher之间进行工作),这个对象可以用来查询任务当前的执行进度、暂停、恢复、取消任务以及获得运算结果,但并非所有的QFuture对象都支持暂停或取消的操作,这里介绍的由QtConcurrent::run()返回的QFuture对象则不能取消,而由QtConcurrent::mappedReduced()返回的对象则是是可以执行取消的。QFutureWatcher通过信号槽来跟异步调用实现交互,即可以通过信号槽来监视线程的完成情况(QFuture的进度), 并获取线程的返回值。QFuture让线程可以通过某个后期产生的结果来实现同步,这个结果可以是任何拥有默认构造函数和拷贝构造函数的类型,如果这个结果在调用其result(), resultAt(), 或者results()方法时还没有准备好,QFuture将会一直等,直到结果准备好为止。在编写代码时,可以通过isResultReadyAt()方法来检测结果是否准备好,可以用绑定信号resultReadyAt来获取线程的结果。对于QFuture对象需要准备多个结果的情况,调用resultCount()方法可以返回连续结果的数量即我们可以从0到resultCount()进行遍历操作。具体内容见:
https://eightplus.github.io/2019/11/13/2019-11-13-qtconcurrent-run/


楼主
发表于 2019-11-14 09:35:12
回复

使用道具 举报

openKylin

GMT+8, 2024-5-3 03:01 , Processed in 0.024043 second(s), 17 queries , Gzip On.

Copyright ©2022 openKylin. All Rights Reserved .

ICP No. 15002470-12 Tianjin

快速回复 返回顶部 返回列表