用法:
pro 添加 QT += concurrent
头文件 #include <QtConcurrent>
QFuture包含的内容:
QFuture future;
future.waitForFinished();等待线程结束,实现阻塞。
future. isFinished() 判断线程是否结束
future.isRunning() 判断线程是否在运行
future.result() 取出线程函数的返回值
代码如下:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <qDebug>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow),
m_bIsExit(false)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButtonstart_clicked()
{
startFun();
}
void MainWindow::on_pushButton_threadstart_clicked()
{
startThread();
}
void MainWindow::on_pushButton_threadend_clicked()
{
m_bIsExit = true;
}
void MainWindow::startThread()
{
qDebug()<<"Start Thread";
//QtConcurrent::run(this, &MainWindow::startFun);//1、不带参数
//QtConcurrent::run(this, &MainWindow::startArgFun, QString("www"));//2、带参数
QFuture<int> future; = QtConcurrent::run(this, &MainWindow::startRuturnFun, 1);//3、利用QFuture返回结果
if(!future.isFinished())
{
future.waitForFinished();
qDebug()<<future.result();
}
}
void MainWindow::startFun()
{
int i = 0;
while(!m_bIsExit)
{
qDebug()<<"startFun "<<i++;
if(i == 100000)
break;
}
}
void MainWindow::startArgFun(QString str)
{
qDebug()<<"Arg Fun "<<str;
}
int MainWindow::startRuturnFun(int i)
{
return i+1;
}