工程导入模块:
QT += concurrent
用法:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
//#include <QThread>
#include <QtConcurrent>
#include <QFuture>
#include <QObject>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::myFunc(const QString & str)
{
qDebug() << __FUNCTION__ << str << QThread::currentThreadId() << QThread::currentThread();
}
void func(QString str)
{
qDebug() << __FUNCTION__ << str << QThread::currentThreadId() << QThread::currentThread();
}
void MainWindow::onBtnClicked()
{
//调用外部函数
QFuture<void> f1 =QtConcurrent::run(func,QString("aaa"));
//调用类成员函数
QFuture<void> f2 =QtConcurrent::run(this,&MainWindow::myFunc,QString("bbb"));
//使用Lambda函数实现
QFuture < void > future = QtConcurrent::run([=](){
qDebug() << __FUNCTION__ << "ccc" << QThread::currentThreadId() << QThread::currentThread();
});
QFuture < void > future2 = QtConcurrent::run([=](){
qDebug() << __FUNCTION__ << "ddd" << QThread::currentThreadId() << QThread::currentThread();
});
}
可以用run函数的返回值future来控制线程。
如:
future.waitForFinished();等待线程结束,实现阻塞。
future. isFinished() 判断线程是否结束
future.isRunning() 判断线程是否在运行
future的类型必须和线程函数的返回值类型相同,可以通过
future.result() 取出线程函数的返回值