概述
QFuture 表示异步计算的结果,当一个操作或者计算耗时较长时,可以采用 QFuture 进行一个异步操作。
基本使用
①.阻塞方式
#include "QtGuiApplication1.h"
#include <QtWidgets/QApplication>
#include "QDebug"
#include "QFuture"
#include "QFutureWatcher"
#include "QtConcurrent/QtConcurrentRun"
#include "QObject"
int longTimeFunc()
{
for (int i = 0; i < 10000; ++i)
{
qDebug() << i << endl;
}
return 100;
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QtGuiApplication1 w;
QFuture<int> future = QtConcurrent::run(longTimeFunc);
future.waitForFinished();
qDebug() << future.result();
w.show();
return a.exec();
}
②.非阻塞方式
#include "QtGuiApplication1.h"
#include <QtWidgets/QApplication>
#include "QDebug"
#include "QFuture"
#include "QFutureWatcher"
#include "QtConcurrent/QtConcurrentRun"
#include "QObject"
int longTimeFunc()
{
for (int i = 0; i < 10000; ++i)
{
qDebug() << i << endl;
}
return 100;
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QtGuiApplication1 w;
QFuture<int> future = QtConcurrent::run(longTimeFunc);
QFutureWatcher<int> * watcher = new QFutureWatcher<int>();
QObject::connect(watcher, &QFutureWatcher<int>::finished, [&]() {
qDebug() << future.result();
});
watcher->setFuture(future);
w.show();
return a.exec();
}