持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第14天,点击查看活动详情
介绍
QFuture他表示的是异步计算的结果,但是他也允许线程针对一个或多个的同步。在qt中除了QFuture还有好多种使用线程的方式,比如最基础的QThread类,还有高级的api QtConcurrent框架,这里的QFuture 就是与QtConcurrent相结合,QFuture其实就是QtConcurrent的返回值类型。他也可以和进度条配合使用,可以实时获取到当前的进度,progressValue()、progressMinimum()、progressText() 函数可以返回详细的进度信息。
QFuture<T> future= QtConcurrent::run(this,槽函数);
参数介绍
这里的T代表的是任何类型,可以用任何类型来替换 而QFuture是用来执行不包括仁和结果的函数。
一个参数可填可不填,
第二个参数代表所使用的槽函数
第三个参数以后是槽函数中参数
这就是他的使用方法,如果需要知道某个结果是否已经准备好,可以使用isResultReadyAt函数来获取,resultCount()本函数也可以获取到连续结果的个数。在使用QFuture对象或乘坐,我们也可以和正在运行的异步计算进行交互,可以通过cnacel()函数取消一个异步到位计算(如果需要取消的是同步,需要在cancel后调用waitForFinished函数),或者用pause()函数来暂停异步的计算,但是要注意的是不是所有的异步计算都可以暂停或者取消,例如QtConcurrent()::run()这个方法所返回发QFuture就是不能被取消的。这个方法的特殊性一定要牢记。如果由该future表示的异步计算当前正在运行, 使用QFuture::isRunning() ,如果正在运行则返回true;否则返回false。
QFuture<void> future = QtConcurrent::run(readData);
// 阻塞调用
future.waitForFinished();
QFuture提供了两种风格的迭代器 Java风格迭代器和sTL风格迭代器****
两者的特点
Java 风格迭代器:高级、易于使用;但另一方面,效率略低。
STL 风格迭代器:低级、使用麻烦;但另一方面,稍微更快。对于了解 STL 的人来说,可以很快上手。