当前位置: 首页 > article >正文

Qt QtConCurrent 使用示例

简介

  QtConcurrent 是 Qt 框架中的一个模块,它提供了一种高级别的 API 来编写多线程程序,而无需直接使用线程、互斥锁或信号量等低级同步原语。QtConcurrent 允许你以声明性的方式启动任务,这些任务将在单独的线程中异步执行,同时你可以使用 QFuture 和 QFutureWatcher 来查询任务的状态和结果。

主要内容

另起线程

QtConCurrent 是qt 线程并发模块、(参数最多5个);

要在另一个线程中运行一个函数,可以使用 QtConcurrent: : run () :

void Function();
QFuture<void> future = QtConcurrent::run(Function);

在线程池中运行

         这将从默认 QThreadPool 获得的单独线程中运行 aFunction。可以使用 QFuture和QFutureWatcher 类来监视函数的状态。如果要使用专用线程池,可以将 QThreadPool 作为第一个参数传递

void Function();
QThreadPool pool;
QFuture<void> future = QtConcurrent::run(&pool, Function);

运行类成员函数

        run() 运行类成员函数

        run ()也接受指向成员函数的指针。第一个参数必须是常量引用或指向类实例的指针。在调用 const 成员函数时,通常使用 const 引用传递; 通常使用指针传递对于调用修改实例的非 const 成员函数。

QtConcurrent::run(this,&className::function,value,....) // value 函数的参数

        示例:

class sample
{
public:
    int Add(int a, int b){
        return a + b; 
    }
};

sample s
QFuture<void> future = QtConcurrent::run(&s, &sample::Add, 1, 2);

// 等待线程结束
future.waitForFinished();

// 获取返回值
int ret = future.result();

总结

  1. 向函数传递参数的方式:通过将参数添加到紧跟在函数名之后的 QtConcurrent::run()调用中来完成向函数传递参数。运行的机制是:在调用 QtConcurrent: : run ()的地方复制每个参数,并在线程开始执行函数时将这些值传递给线程。调用 QtConcurrent: : run ()后对参数所做的更改对线程不可见。
  2. 获取函数返回值的方式 返回值通过 QFuture 获得; 注意,QFuture: : result ()函数阻塞并等待结果可用。当函数完成执行并且结果可用时,使用 QFutureWatcher 获得通知。

http://www.kler.cn/a/288812.html

相关文章:

  • 条款19 对共享资源使用std::shared_ptr
  • acitvemq AMQP:因为消息映射策略配置导致的MQTT接收JMS消息乱码问题 x-opt-jms-dest x-opt-jms-msg-type
  • docker-compose怎么写注释
  • 远程服务器没办法显示图片
  • 【HarmonyOS】鸿蒙arrayBuffer和Uint8Array互相转化
  • 在Windows上读写Linux磁盘镜像的一种方法
  • 探索Unity与C#的无限潜能:从新手到高手的编程之旅
  • 设计模式-UML建模语言面向对象的SOLIDLC
  • C++ 设计模式——备忘录模式
  • MES 系统中工艺管理--工艺指令管理
  • 【QT开发日志】QT开发环境搭建:下载与安装以及开发工具的选择(2024最新版)
  • 一起学习LeetCode热题100道(68/100)
  • 机器学习如何助力网络生物学
  • 合宙LuatOS开发板Core_Air780EP使用说明
  • APP长文本内容编辑器功能实现方案
  • MySQL之UDF提权复现
  • 老师怎样发布新生月考成绩查询?
  • 车载测试协议:ISO-14229、ISO-15765、ISO-11898、ISO-26262【实操项目学习】
  • jmeter中上传文件接口,当文件名为中文时出现乱码
  • JPG转SVG,分享便捷的转换方法
  • 【EI稳定检索】2024年第三届环境工程与可持续能源国际会议
  • 【SpringBoot】自动配置原理
  • MySQL知识点复习 - 事务篇
  • Linux性能调优,从优化思路说起
  • MariaDB VS MySQL
  • Python数据分析实战,兰州市二手房市场深度分析