QtConcurrent::run()示例

 QtConcurrent::run()的作用是使函数在另一个线程中执行。

#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
#include <QThread>
#include <QtConcurrent>
#include <QFutureWatcher>
#include <QApplication>

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    qDebug()<<"main thread"<<QThread::currentThreadId();
}

Widget::~Widget()
{
    delete ui;
}

定义3个函数 参数个数不同
QString Widget::fun1(int s1,int s2,int s3,int s4,int s5)
{
    qDebug()<<"fun1"<<s1<<s2<<QThread::currentThreadId();
    return QString("%1__%2").arg(s1).arg(s2);
}

void Widget::fun2(int s1)
{
    qDebug()<<"fun2"<<s1<<QThread::currentThreadId();
}

int Widget::fun3(int s1)
{
    QThread::msleep(1000);
    qDebug()<<"fun3"<<s1<<QThread::currentThreadId();
    return s1*100;
}

//调用
void Widget::on_pushButton_clicked()
{
    //QtConcurrent::run Widget::fun1函数的参数不能超过5个
    QFuture<QString> result = QtConcurrent::run(this,&Widget::fun1,666,555,1,2,3);
    result.waitForFinished();//阻塞调用
    qDebug()<<"调用结果"<<result.result();

    QFuture<void> result2 = QtConcurrent::run(this,&Widget::fun2,888);

    //异步调用
    QFutureWatcher<int> * watcher = new QFutureWatcher<int>;
    connect(watcher, &QFutureWatcher<int>::finished,[this,watcher]()
    {
        qDebug()<<"result3 完成";
        delete watcher;
    });
    QFuture<int> result3 = QtConcurrent::run(this,&Widget::fun3,999);
    watcher->setFuture(result3);
}

  结果:

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
QtConcurrent::run方法是Qt框架中提供的一种简单的并发执行函数的方式。它可以在后台线程中执行指定的函数,并在函数执行完成后返回结果。使用此方法可以很容易地实现多线程并发执行,从而提高程序的运行效率。 使用QtConcurrent::run方法需要指定要执行的函数和函数的参数。函数可以是全局函数、静态函数或者类的成员函数。参数可以是任意类型的数据,如整数、浮点数、字符串等。 以下是一个使用QtConcurrent::run方法的示例代码: ```c++ #include <QtCore> #include <QtConcurrent> void doWork(int value) { // 执行一些耗时的操作 QThread::sleep(5); qDebug() << "value: " << value; } int main(int argc, char *argv[]) { QCoreApplication app(argc, argv); // 在后台线程中执行doWork函数 QFuture<void> future = QtConcurrent::run(doWork, 42); // 等待doWork函数执行完成 future.waitForFinished(); return app.exec(); } ``` 在上述代码中,我们定义了一个函数doWork,它接受一个整数参数value并执行一些耗时的操作。然后我们通过QtConcurrent::run方法在后台线程中执行doWork函数,并传入参数42。最后,我们使用QFuture对象等待doWork函数执行完成。 需要注意的是,QtConcurrent::run方法并不保证函数的执行顺序,因此不能依赖函数的执行顺序来编写程序。如果需要保证函数的执行顺序,可以使用QFuture对象的依赖关系来实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值