QT最大线程并发

声明一个处理函数;int timeTask();

头文件:

#include <QtConcurrent>
#include <QFuture>

并发处理改函数的任务,直到处理完成:

QFuture<int> ft = QtConcurrent::run(this, &ch72_concurrent::timeTask);

    while (!ft.isFinished())
    {
        QApplication::processEvents(QEventLoop::AllEvents, 30);
    }

带参数的函数:

将参数写在后面

QFuture<int> ft = QtConcurrent::run(this, &ch74::timeTask, num1, num2);

通过QFutureWatcher获取返回值:

QFutureWatcher<int>* fw = new QFutureWatcher<int>;

    connect(fw, &QFutureWatcher<int>::finished, [&]{
        qDebug() << "QFutureWatcher finished";
        qDebug() << "result = " << fw->result();
        });

    QFuture<int> ft = QtConcurrent::run(this, &ch74::timeTask, num1, num2);
    fw->setFuture(ft);

    while (!ft.isFinished())
    {
        QApplication::processEvents(QEventLoop::AllEvents, 30);
    }

完整代码

#include "ch74.h"
#include <QDebug>
#include <QtConcurrent>
#include <QFuture>
#include <QFutureWatcher>


ch74::ch74(QWidget *parent)
    : QWidget(parent)
{
    ui.setupUi(this);
}

ch74::~ch74()
{}

int ch74::timeTask(int& num1, int& num2)
{
    for (int i = 0; i < 1000; i++)
    {
        num1++;
        num2++;
        qDebug() << num1;
        qDebug() << num2;
    }

    return num1 + num2;
}

void ch74::on_pushButton_clicked()
{
    int num1 = 0;
    int num2 = 0;

    QFutureWatcher<int>* fw = new QFutureWatcher<int>;

    connect(fw, &QFutureWatcher<int>::finished, [&]{
        qDebug() << "QFutureWatcher finished";
        qDebug() << "result = " << fw->result();
        });

    QFuture<int> ft = QtConcurrent::run(this, &ch74::timeTask, num1, num2);
    fw->setFuture(ft);

    while (!ft.isFinished())
    {
        QApplication::processEvents(QEventLoop::AllEvents, 30);
    }
}

相关推荐

  1. QT线并发

    2023-12-18 19:26:02       58 阅读
  2. Qt开发 | Qt创建线 | Qt并发-QtConcurrent

    2023-12-18 19:26:02       20 阅读
  3. QT进阶】Qt线并发线并发的简单介绍

    2023-12-18 19:26:02       30 阅读
  4. QT进阶】Qt线并发之QtConcurrent的简单介绍

    2023-12-18 19:26:02       40 阅读
  5. 并发基础之线

    2023-12-18 19:26:02       32 阅读
  6. C++多线并发

    2023-12-18 19:26:02       20 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-18 19:26:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-18 19:26:02       101 阅读
  3. 在Django里面运行非项目文件

    2023-12-18 19:26:02       82 阅读
  4. Python语言-面向对象

    2023-12-18 19:26:02       91 阅读

热门阅读

  1. NFTScan 获得比特丛林 (BitJungle) 公司战略投资

    2023-12-18 19:26:02       55 阅读
  2. torch中 squeeze 和 unsqueeze 的不同用法

    2023-12-18 19:26:02       57 阅读
  3. RHEL8中ansible的使用

    2023-12-18 19:26:02       67 阅读
  4. android 的ClassLoader加载dex

    2023-12-18 19:26:02       44 阅读
  5. 飞天使-docker知识点12-docker-compose

    2023-12-18 19:26:02       62 阅读
  6. 15.VLAN

    15.VLAN

    2023-12-18 19:26:02      59 阅读
  7. 第26节: Vue3 绑定到对象

    2023-12-18 19:26:02       65 阅读
  8. 迷茫吗?看看这里

    2023-12-18 19:26:02       62 阅读
  9. JIRA 重置管理员密码

    2023-12-18 19:26:02       61 阅读
  10. 设置Jira启动参数和选项

    2023-12-18 19:26:02       77 阅读
  11. FFmpeg零基础学习(四)——CPU视频解码 重新编码

    2023-12-18 19:26:02       58 阅读
  12. linux/CentOS 7 安装jdk

    2023-12-18 19:26:02       69 阅读