QT高级线程API总结(四)QFuture

目录

1、Header: #include

2、qmake: QT += core

3、详情描述

4、Number functions

4.1 void QFuture::cancel()

4.2 bool QFuture::isCanceled() const

4.3 bool QFuture::isFinished() const

4.4 bool QFuture::isPaused() const

4.5 bool QFuture::isResultReadyAt(int index) const

4.6 bool QFuture::isRunning() const

4.7 bool QFuture::isStarted() const

4.8 void QFuture::setPaused(bool paused)

4.9 void QFuture::pause()

4.10 int QFuture::progressMaximum() const

4.11 int QFuture::progressMinimum() const

4.12 QString QFuture::progressText() const

4.13 int QFuture::progressValue() const

4.14 T QFuture::result() const

4.15 T QFuture::resultAt(int index) const

4.16 int QFuture::resultCount() const

4.17 QList QFuture::results() const

4.18 void QFuture::resume()

4.19 void QFuture: togglePaused ()

4.20 void QFuture::waitForFinished()


1、Header: #include <QFuture>

2、qmake: QT += core

3、详情描述

QFuture类表示异步计算的结果。

要开始计算,可以使用Qt Concurrent框架中的一个api。

QFuture允许线程针对一个或多个结果进行同步,这些结果将在稍后的时间点准备就绪。结果可以是具有默认构造函数和复制构造函数的任何类型。如果一个结果在调用result()、resultAt()或results()函数时不可用,QFuture将等待直到结果可用。您可以使用isResultReadyAt()函数来确定结果是否准备就绪。对于报告多个结果的QFuture对象,resultCount()函数返回连续结果的数量。这意味着迭代从0到resultCount()的结果总是安全的。

QFuture提供了一个java风格的迭代器(QFutureIterator)和一个stl风格的迭代器(QFuture::const_iterator)。使用这些迭代器是将来访问结果的另一种方法。

QFuture还提供了与正在运行的计算交互的方法。例如,可以使用cancel()函数来取消计算。要暂停计算,请使用setPaused()函数或pause()、resume()或togglePaused()方便函数之一。请注意,不是所有的异步计算都可以取消或暂停。例如,QtConcurrent::run()返回的future不能被取消;但是QtConcurrent::mappedReduced()返回的future可以。

进度信息由progressValue()、progressMinimum()、progressMaximum()和progressText()函数提供。waitForFinished()函数导致调用线程阻塞并等待计算完成,以确保所有结果可用。

QFuture表示的计算状态可以通过isCanceled()、isStarted()、isFinished()、isRunning()或isPaused()函数来查询。

QFuture是一个轻量级引用计数类,可以按值传递。

QFuture<void>被专门用于不包含任何结果获取函数。任何QFuture<T>也可以被赋值或复制到QFuture<void>中。如果只需要状态或进展信息,而不需要实际的结果数据,这是有用的。

要使用信号和插槽与正在运行的任务交互,请使用QFutureWatcher.。

4、Number functions

4.1 void QFuture::cancel()

取消所代表的异步计算。注意,取消是异步的。当需要同步取消时,在调用cancel()之后使用waitForFinished()。

当前可用的结果仍然可以在取消后访问,但调用此函数后,新的结果将不可用。任何监视这个未来的QFutureWatcher对象都不会为取消的未来提供进度和结果准备信号。

请注意,不是所有的异步计算都可以取消。例如,QtConcurrent::run()返回的future不能被取消;但是QtConcurrent::mappedReduced()返回的future可以。

4.2 bool QFuture::isCanceled() const

如果异步计算已经被cancel()函数取消,则返回true;否则返回false。

请注意,即使这个函数返回true,计算可能仍然在运行。有关更多细节,请参见cancel()。

4.3 bool QFuture::isFinished() const

如果由该future表示的异步计算已经完成,则返回true;否则返回false。

4.4 bool QFuture::isPaused() const

如果异步计算已通过pause()函数暂停,则返回true;否则返回false。

请注意,即使这个函数返回true,计算可能仍然在运行。有关更多细节,请参见setPaused()。

4.5 bool QFuture::isResultReadyAt(int index) const

如果索引处的结果立即可用,则返回true;否则返回false。

4.6 bool QFuture::isRunning() const

如果由该future表示的异步计算当前正在运行,则返回true;否则返回false。

4.7 bool QFuture::isStarted() const

如果由该future表示的异步计算已经启动,则返回true;否则返回false。

4.8 void QFuture::setPaused(bool paused)

如果paused为true,该函数将暂停由future表示的异步计算。如果计算已经暂停,则此函数不执行任何操作。当未来暂停时,任何监视此未来的QFutureWatcher对象将停止交付进度和结果准备信号。一旦未来恢复,信号传递将继续进行。

如果pause为false,该函数将继续异步计算。如果之前没有暂停计算,则此函数不执行任何操作。

请注意,不是所有的计算都可以暂停。例如,QtConcurrent::run()返回的future不能暂停;但是QtConcurrent::mappedReduced()返回的future可以。

4.9 void QFuture::pause()

暂停由这个未来表示的异步计算。这是一个简单调用setPaused(true)的方便方法。

4.10 int QFuture::progressMaximum() const

返回最大的progressValue()。

4.11 int QFuture::progressMinimum() const

返回最小的progressValue()。

4.12 QString QFuture::progressText() const

返回由异步计算报告的进度的(可选)文本表示形式。

请注意,并非所有的计算都提供了进程的文本表示,因此,该函数可能返回一个空字符串。

4.13 int QFuture::progressValue() const

返回当前进度值,它介于progressMinimum()和progressMaximum()之间。

4.14 T QFuture::result() const

返回的第一个结果。如果结果不能立即可用,该函数将阻塞并等待结果可用。这是调用resultAt(0)的一个方便方法。

4.15 T QFuture::resultAt(int index) const

在以后的索引处返回结果。如果结果不能立即可用,该函数将阻塞并等待结果可用。

4.16 int QFuture::resultCount() const

返回在此可用的连续结果数。由于结果集中存在空白,实际存储的结果数可能与此值不同。迭代从0到resultCount()的结果总是安全的。

4.17 QList<T> QFuture::results() const

返回所有结果。如果结果不是立即可用的,这个函数将阻塞并等待它们可用。

4.18 void QFuture::resume()

恢复这个未来所表示的异步计算。这是一个简单调用setPaused(false)的方便方法。

4.19 void QFuture: togglePaused ()

切换异步计算的暂停状态。换句话说,如果计算当前暂停,调用这个函数将恢复它;如果计算正在运行,则会暂停。这是一个用于调用setPaused(!isPaused())的方便方法。

4.20 void QFuture::waitForFinished()

等待异步计算完成(包括cancel()ed计算)。

 

  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本文档是QT中文版本 内容详尽,下面是片段 信号 void activated ( int id ) 静态公有成员 QKeySequence shortcutKey ( const QString & str ) QString keyToString ( QKeySequence k ) (obsolete) QKeySequence stringToKey ( const QString & s ) (obsolete) 保护成员 virtual bool eventFilter ( QObject * o, QEvent * e ) -------------------------------------------------------------------------------- 详细描述 QAccel类用来处理键盘的加速键和快捷键。 键盘加速键是在某个组合键按下的时候出发一个动作,加速键可以处理窗口部件和它子部件里所有的键盘动作所以它不会被键盘焦点所影响。 在大多数情况下,你不需要直接使用这个类。使用QAction类建立的具有加速键的动作可以同时在菜单和工具栏里使用。如果你的兴趣只是在菜单里使用QMenuData::insertItem()或者QMenuData::setAccel()建立只作用在菜单里的加速键。那么许多窗口部件可以自动的生成加速键,比如QButton、QGroupBox、QLabel(使用QLabel::setBuddy())、QMenuBar和QTabBar。实例: QPushButton p( "&Exit", parent ); // 自动使用快捷键ALT+Key_E QPopupMenu *fileMenu = new fileMenu( parent ); fileMenu->insertItem( "Undo", parent, SLOT(undo()), CTRL+Key_Z ); QAccel包括一个加速键的列表,这个列表里的项目可以使用insertItem()、removeItem()、clear()、key()和findKey()。 每一个加速键项目是由一个标示符和 QKeySequence组成。一个单独的键组是由一个键盘码组合上改变符形成的(SHIFT,CTRL,ALT 或者 UNICODE_ACCEL)。例如,CTRL + Key_p可以作为文本打印的快捷键。这个键的键盘码在qnamespace.h里列出。还有,使用UNICODE_ACCEL可以使字符以统一码(unicode)的形式表现出来。例如 UNICODE_ACCEL + 'A' 所给出的加速键和Key_A是一样的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值