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(); }