QtConcurrent的基础用法map,mapped,mappedReduced

2024-03-28 05:08

本文主要是介绍QtConcurrent的基础用法map,mapped,mappedReduced,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

实际上应该说多线程让QtConcurrent实现了并行可能更准确点。不然map函数就不好理解了。那么QtConcurrent的map函数又有什么用呢?这就要先看看map的参数了。map函数有两个参数,第一个是序列(如QList),第二个参数是一个函数。它的作用就是同时用第二个参数来计算第一个参数中的每一个元素,且结果直接覆盖到元素中。

    blob.png

    如QtConcurrent::map传入图中的QList和Func,QList中的1、3、5、7、9会同时执行Func函数。执行结束后QList值变为2、4、6、8、10。

 用实例说话:

    1.先定义Func函数。

void Func(int& a){a += 1;
}

   2.定义一个QList,调用map函数。

    QList<int> alist;alist<<1<<3<<5<<7<<9;QFuture<void> f = QtConcurrent::map(alist,Func); //map函数f.waitForFinished();qDebug()<<"alist"<<alist;

  运行结束后再打印出alist

blob.png

alist的值变为了2、4、6、8、10。另外Func函数被调用了5次,且多数在不同的线程中执行的,为什么说是大多数而不是全部呢?因为我们之前试过线程池默认最大线程数是4,而我们这里有5个数。

 

和map函数长的很相近的还有两个函数,一个是mapped,另一个是mappedReduced。 mapped的作用和map类似,只是把计算结果放到了新的容器中。举例:

    1.定义一个用于计算的函数,该函数有返回值

int func2(int a){return a + 1;
}

   2.调用mapped函数

    QList<int> alist;alist<<1<<3<<5<<7<<9;QFuture<int> f = QtConcurrent::mapped(alist,func2); //QFuture的类型为intf.waitForFinished();qDebug()<<"alist"<<alist;qDebug()<<"newlist"<<f.results();

blob.png

 从运行结果可以看到原容器的值没有改变。

 

mappedReduced函数比mapped多一个参数,这个参数也是个函数。作用就是将mapped出来的结果再计算最终得出一个值。如上例中计算得出的结果是2、4、6、8、10。我们可以在写一个函数将这些值加起来得到一个值。这个函数遵循如图形式

blob.png

result就是最后的结果。intermediate就是mapped出来的结果。接着举例。

 1.定义一个计算和的函数,形如上图。

void sum(int& result, const int& b){result += b;
}

 2.调用mappedReduced函数,查看运行结果。

    QList<int> alist;alist<<1<<3<<5<<7<<9;QFuture<int> result = QtConcurrent::mappedReduced(alist,func2,sum);result.waitForFinished();qDebug()<<result.result();

blob.png

结果是30,是由2、4、6、8、10相加得来的。

这篇关于QtConcurrent的基础用法map,mapped,mappedReduced的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/854524

相关文章

mapstruct中的@Mapper注解的基本用法

《mapstruct中的@Mapper注解的基本用法》在MapStruct中,@Mapper注解是核心注解之一,用于标记一个接口或抽象类为MapStruct的映射器(Mapper),本文给大家介绍ma... 目录1. 基本用法2. 常用属性3. 高级用法4. 注意事项5. 总结6. 编译异常处理在MapSt

java中long的一些常见用法

《java中long的一些常见用法》在Java中,long是一种基本数据类型,用于表示长整型数值,接下来通过本文给大家介绍java中long的一些常见用法,感兴趣的朋友一起看看吧... 在Java中,long是一种基本数据类型,用于表示长整型数值。它的取值范围比int更大,从-922337203685477

Java中Map.Entry()含义及方法使用代码

《Java中Map.Entry()含义及方法使用代码》:本文主要介绍Java中Map.Entry()含义及方法使用的相关资料,Map.Entry是Java中Map的静态内部接口,用于表示键值对,其... 目录前言 Map.Entry作用核心方法常见使用场景1. 遍历 Map 的所有键值对2. 直接修改 Ma

MyBatis ResultMap 的基本用法示例详解

《MyBatisResultMap的基本用法示例详解》在MyBatis中,resultMap用于定义数据库查询结果到Java对象属性的映射关系,本文给大家介绍MyBatisResultMap的基本... 目录MyBATis 中的 resultMap1. resultMap 的基本语法2. 简单的 resul

从基础到进阶详解Pandas时间数据处理指南

《从基础到进阶详解Pandas时间数据处理指南》Pandas构建了完整的时间数据处理生态,核心由四个基础类构成,Timestamp,DatetimeIndex,Period和Timedelta,下面我... 目录1. 时间数据类型与基础操作1.1 核心时间对象体系1.2 时间数据生成技巧2. 时间索引与数据

Python主动抛出异常的各种用法和场景分析

《Python主动抛出异常的各种用法和场景分析》在Python中,我们不仅可以捕获和处理异常,还可以主动抛出异常,也就是以类的方式自定义错误的类型和提示信息,这在编程中非常有用,下面我将详细解释主动抛... 目录一、为什么要主动抛出异常?二、基本语法:raise关键字基本示例三、raise的多种用法1. 抛

安装centos8设置基础软件仓库时出错的解决方案

《安装centos8设置基础软件仓库时出错的解决方案》:本文主要介绍安装centos8设置基础软件仓库时出错的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录安装Centos8设置基础软件仓库时出错版本 8版本 8.2.200android4版本 javas

Java中JSON格式反序列化为Map且保证存取顺序一致的问题

《Java中JSON格式反序列化为Map且保证存取顺序一致的问题》:本文主要介绍Java中JSON格式反序列化为Map且保证存取顺序一致的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未... 目录背景问题解决方法总结背景做项目涉及两个微服务之间传数据时,需要提供方将Map类型的数据序列化为co

java中Optional的核心用法和最佳实践

《java中Optional的核心用法和最佳实践》Java8中Optional用于处理可能为null的值,减少空指针异常,:本文主要介绍java中Optional核心用法和最佳实践的相关资料,文中... 目录前言1. 创建 Optional 对象1.1 常规创建方式2. 访问 Optional 中的值2.1

git stash命令基本用法详解

《gitstash命令基本用法详解》gitstash是Git中一个非常有用的命令,它可以临时保存当前工作区的修改,让你可以切换到其他分支或者处理其他任务,而不需要提交这些还未完成的修改,这篇文章主要... 目录一、基本用法1. 保存当前修改(包括暂存区和工作区的内容)2. 查看保存了哪些 stash3. 恢