qt中将一个类的函数放到线程中执行
效果图
-
在.pro中添加
QT += concurrent -
创建测试类如下
class MyConcurentTest{
public:
MyConcurentTest(){}
~MyConcurentTest(){}
void fun1(QString str){
for(int i=0;i<10;i++){
qDebug() << "hello " << str;
}
}
bool fun2(){
for(int i=0;i<10;i++){
qDebug() << "hello fun2";
}
return true;
}
};
- 实例化测试类,并将其中的函数放入到线程中执行
MyConcurentTest mc;
//QFuture后的<>内写入函数返回的类型
//无参数返回,传递参数
QString str = "gg";
QFuture<void> res = QtConcurrent::run(&mc, &MyConcurentTest::fun1,str);
//有参数返回,无参数传递
//QFuture<bool> res = QtConcurrent::run(&mc, &MyConcurentTest::fun2);
for(int i=0;i<10;i++){
qDebug() << "hello main";
}
//获取线程中执行函数返回的结果
//bool testres = res.result();
//qDebug() << "res:" << testres << res.isFinished();// true false
res.waitForFinished();
//res.isFinished()判断线程是否执行完成
qDebug() << "res:" << res.isFinished();//true