QFutureWatcher获取QtConcurrent::run线程函数的返回值

 

QFutureWatcher获取QtConcurrent::run线程函数的返回值

mythread.h

#ifndef MYTHREAD_H
#define MYTHREAD_H
#include<QRunnable>
#include<QDebug>
#include<QFuture>
#include<QFutureWatcher>
#include<QtConcurrent/QtConcurrent>
#include<QThread>
​
class myThread :public QThread,QRunnable
{
public:
    myThread();
​
    void run() override;
​
    int  test(int c, int b);
    void testFuture();
};
​
#endif // MYTHREAD_H
​

mythread.cpp

#include "mythread.h"
#include<QDebug>
#include<QThread>
#include<QApplication>
​
myThread::myThread()
{
    qDebug()<<"myThread cons"<<QThread::currentThreadId();
}
​
void myThread::run()
{
    qDebug()<<QThread::currentThreadId()<<"runing ";
}
​
int  myThread::test(int c, int b)
{
    qDebug()<<QThread::currentThreadId()<<"runing";
    qDebug()<<"c = "<<c;
    qDebug()<<"b = "<<b;
​
    return c+b;
}
​
void myThread::testFuture()
{
    int c = 9;
    int b = 8;
    QFuture<int> ft = QtConcurrent::run(this,&myThread::test,c,b);
​
    QFutureWatcher<int> *fw = new QFutureWatcher<int>;
    fw->setFuture(ft);
​
    connect(fw,&QFutureWatcher<int>::finished,[&]
    {
        qDebug()<<"result = "<<fw->result();
    });
​
    while (!ft.isFinished()) {
        QApplication::processEvents(QEventLoop::AllEvents,30);
    }
}
​

main.cpp

#include "widget.h"
#include<QDebug>
#include<QThread>
#include <QApplication>
#include"mythread.h"
​
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
​
    qDebug()<<"main thread id = "<<QThread::currentThreadId();
​
    myThread *myth1 = new myThread();
    myth1->testFuture();
​
​
​
    return a.exec();
}
​
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值