Qt扫盲-QFuture理论总结

一、概述

QFuture 表示的是Qt里面异步计算的计算结果。要开始计算,使用Qt Concurrent框架中的一个api 即可。

QFuture允许线程根据一个或多个结果同步,这些结果将在稍后的时间点准备好。结果可以是具有默认构造函数和复制构造函数的任何类型。如果在调用 result()、resultAt() 或 results() 函数时结果不可用,QFuture将等待,直到结果可用。

我们可以使用 isResultReadyAt() 函数来确定结果是否准备好了。对于报告多个结果的QFuture对象,resultCount()函数返回连续结果的个数。这意味着从0到resultCount()遍历结果总是安全的。

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

二、获取QFuture 状态

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被指定为不包含任何结果获取函数。任何QFuture都可以被赋值或复制到QFuture中。如果只需要状态或进度信息,而不是实际的结果数据,这是有用的。

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

猜你喜欢

转载自blog.csdn.net/qq_43680827/article/details/133957445
今日推荐