QFuture类表示异步计算的结果。
1、基本调用
#include <QCoreApplication>
#include <QtConcurrent/QtConcurrentRun>
#include <QDebug>
void print(const QString &name)
{
qDebug() << name;
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QFuture<void> future = QtConcurrent::run(print, QString("test"));
// 阻塞调用
future.waitForFinished();
}
2、配合QFutureWatcher, 把它和一个future相关联,他能在调用完成之后,发出QFutureWatcher::finished信号。 这样主线程就能去做其他事情,不用阻塞在等待future完成的那一步。
示例为等待界面
m_pDialog = new Dialog(this);
//调用等待窗口显示
m_pDialog->show();
QFutureWatcher<void> *pwatcher = nullptr;
pwatcher = new QFutureWatcher<void>;
QFuture<void> future = QtConcurrent::run([=]() {
PasswordAuth(m_strAccount, m_strPassword); //耗时逻辑操作
});
connect(pwatcher, &QFutureWatcher<void>::finished, this, [=]() {
GifWaitClose(1); //耗时操作完成
});
pwatcher->setFuture(future);