QFuture 类 Qt 控制线程
来源:互联网 发布:js ajax fail 编辑:程序博客网 时间:2024/06/13 14:18
QFuture类能够获取一个一步计算的结果。
通过使用这个 Qt Concurrent 框架内的一个api来开始一次计算。
它可以用允许多个线程同步一个或多个结果在稍后的一段时间内计算完成。这个结果可以是任意一种类型,这个类型有默认的构造函数和拷贝构造函数。如果通过调用:
result(), resultAt(), or results()不能获取当前的执行时间,那QFuture 将会一直等待直到可以获取当前的时间。你可以使用 isResultReadyAt() 来判断这个结果是否已经完成。QFuture 对象会报告不只一个结果, resultCount() 将会返回当前持续结果的数量。这就意味着通过这个结果值 0~resultCount()来进行迭代永远是安全的。
QFuture 提供了一个 Java-style iterator (QFutureIterator) and an STL-style iterator (QFuture::const_iterator). 也可以通过这些迭代器来获取 QFuture 的结果。
-----------------------------
QFuture 也会在运行计算时提供不同的交互方式,例如,这个计算可以被取消通过 cancel() ,被暂停 setPaused() ,或者这些函数 pause(), resume(), or togglePaused() 其中的一个, 要注意不是所有的异步计算都可以被取消或者停止。例如, 这个 future是由 QtConcurrent::run() 返回的那他就不能被取消;但是如果是由 QtConcurrent::mappedReduced() 返回的就是可以的。
由 progressValue(), progressMinimum(), progressMaximum(), and progressText() 可以提供计算的进度信息。这个 waitForFinished() 函数将会使调用的线程锁定等待计算的完成,以此来保证所有的结果是可靠的。
当前的计算状态可以通过 QFuture can be queried using the isCanceled(), isStarted(), isFinished(), isRunning(), or isPaused() 来获得。
QFuture<void> 是被用来执行不包含任何结果的函数的, 而任意的 QFuture<T> 可以被用来复制或者拷贝给 QFuture<void> 函数。这是非常有用的,如果只需要进度或者状态信息,而不需要具体的数据信息。
如果要调用 正在运行的任务在使用的信号和槽, 请使用 QFutureWatcher.
api:
- class const_iterator
- typedef ConstIterator
- QFuture()
- QFuture(const QFuture &)
- ~QFuture()
- begin() const : const_iterator
- cancel()
- constBegin() const : const_iterator
- constEnd() const : const_iterator
- end() const : const_iterator
- isCanceled() const : bool
- isFinished() const : bool
- isPaused() const : bool
- isResultReadyAt(int) const : bool
- isRunning() const : bool
- isStarted() const : bool
- pause()
- progressMaximum() const : int
- progressMinimum() const : int
- progressText() const : QString
- progressValue() const : int
- result() const : T
- resultAt(int) const : T
- resultCount() const : int
- results() const : QList<T>
- resume()
- setPaused(bool)
- togglePaused()
- waitForFinished()
- operator T() const
- operator!=(const QFuture &) const : bool
- operator=(const QFuture &) : QFuture &
- operator==(const QFuture &) const : bool
一个简单的demo:
#include <QDebug>#include <QThread>#include <QString>#include <qtconcurrentrun.h>#include <QApplication>using namespace QtConcurrent;void hello(QString name){ qDebug() << "Hello" << name << "from" << QThread::currentThread();}int main(int argc, char **argv){ QApplication app(argc, argv); QFuture<void> f1 = run(hello, QString("Alice")); QFuture<void> f2 = run(hello, QString("Bob")); f1.waitForFinished(); f2.waitForFinished();}
可以看下终端的输出结果:
- QFuture 类 Qt 控制线程
- [Qt] QFuture和QFutureWatcher
- Qt之QFuture
- 使用QFuture类监控异步计算的结果
- QFuture QFutureWatcher
- QFutureWatcher QFuture
- Qt中多线程系列之线程控制
- Qt中多线程系列之线程控制
- 通过线程控制QT控制台程序退出
- qt线程类---QThread
- 编写Qt线程类
- Qt线程类
- Qt线程类
- QT控制台下学习类
- QT线程(一):线程类
- QT线程(一):线程类
- QT线程(一):线程类
- QT线程(一):线程类
- javascript原生小练习(三)--拼图小游戏
- BZOJ2083: [Poi2010]Intelligence test
- Android Context与接口的强制类型转换
- cocos2d - JS 手机浏览器上显示cc.log()
- 最简易的网络框架封装(新手可看)
- QFuture 类 Qt 控制线程
- 互联网运营人员不得不知的14款工具神器
- onchange监听input值变化及input隐藏后change事件不触发的原因与解决方法
- gcf,gca,gco的区别
- 很认真的聊一聊程序员的自我修养
- Codeforces Round #367 (Div. 2) B Interesting drink
- 浅尝安卓事件分发机制
- RasSetEntryProperties
- 防止EditText自动获得焦点