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

如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

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();

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

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

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();

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

QtConcurrent的基础用法map,mapped,mappedReduced相关推荐

  1. [渗透攻防] 二.SQL MAP工具从零解读数据库及基础用法

    这是最近学习渗透和网站攻防的文章,希望能深入地学习这部分知识,自己作为一个初学者,前一篇文章从数据库原理解读了防止SQL注入,这篇文章通过SQLMAP工具简单介绍SQL注入及用法.自己仍在慢慢探索网络 ...

  2. Docker部署及基础用法

    Docker基础用法 Docker介绍 什么是Docker OCI&OCF Docker镜像与镜像仓库的关系 Docker对象 Docker工作原理 Docker部署 Docker 事件状态 ...

  3. Pandas基础用法合集(中文官档)

    本节介绍 pandas 数据结构的基础用法.下列代码创建示例数据对象: In [1]: index = pd.date_range('1/1/2000', periods=8) In [2]: s = ...

  4. Promise基础用法

    什么是Promise? Promise是用来处理异步的; Promise就是承诺,对未来的承诺; 所谓的Promise(承诺),里面保存着未来才会结束的事件的结果; Promise是异步编程的一种解决 ...

  5. pandas object转float_数据分析篇 | Pandas基础用法6【完结篇】

    这是最后一篇,至此Pandas系列终于连载完了,有需要的也可以看看前面6篇,尽请收藏. 数据分析篇 | Pandas 概览 数据分析篇 | Pandas基础用法1数据分析篇 | Pandas基础用法2 ...

  6. dubbo官方文档中文_Pandas中文官方文档:基础用法5

    本文授权转载自Python大咖谈禁止二次转载 大家好,我是老表 阅读文本大概需要 16 分钟 建议从头开始学习,本系列前四篇 Pandas中文官方文档:基础用法1 Pandas中文官方文档:基础用法2 ...

  7. struct用法_精讲响应式webclient第1篇-响应式非阻塞IO与基础用法

    笔者在之前已经写了一系列的关于RestTemplate的文章,如下: 精讲RestTemplate第1篇-在Spring或非Spring环境下如何使用 精讲RestTemplate第2篇-多种底层HT ...

  8. Promise详解(一) ----基础用法

    什么是Promise Promise是由社区最早提出并实现的,后加入到es6规范中.为更好处理javascript异步问题,用于解决其多次异步回掉嵌套问题.下面先尝试下promise的基础用法吧. 创 ...

  9. ORACLE的基础用法

    ORACLE的基础用法 转 自:http://blog.163.com/kelly_19831017/blog/static/6196787020083133348873/ sqlplus sys/o ...

最新文章

  1. BTC跟跌黄金,BCH领涨主流 2019.8.14
  2. python 中 pynlpir错误 Cannot Open Configure file pynlpir解决
  3. 解决 用户'sa'登录失败。错误:18456 问题
  4. (王道408考研操作系统)第五章输入/输出(I/O)管理-第一节3:I/O控制方式
  5. 《Docker进阶与实战》——3.3节Docker image的组织结构
  6. OneNote中到底能放多少种东西?
  7. Ubuntu与stm32串口通信及Windows与stm32串口通信
  8. 服务器芯片的引脚功能,74ls06中文资料汇总(74ls06引脚图及功能_真值表及应用电路)...
  9. 当A题成为一种习惯--POJ AC100题纪念贴
  10. SDN相关组织之ODL(opendaylight)
  11. python row函数_Python extmath.row_norms方法代码示例
  12. 以创业思维和产品思维复盘《商业简史》
  13. [Python]TempConvert.py(温度转换)解释拓展
  14. OVM-V1.3正式发布,新增三大功能 ,采用全新UI界面
  15. 综合应用 -- 购物车
  16. os.system() 和os.popen()的区别
  17. 3dTile技术研究-概念详述(5)
  18. linux查看IO情况
  19. Android“应用未安装”的解决办法
  20. php将数字转换人民币显示,php数字转化为人民币大写

热门文章

  1. dom 兄弟_DOM技巧和技巧:父母,孩子和兄弟姐妹
  2. 使重复的Spring-MVC的url-mapping具有优先级
  3. 树莓派配置usb无线网卡
  4. 2023年伊朗签证申请攻略分享
  5. go语言反射机制、reflect.TypeOf、 reflect.ValueOf、字符串处理(详解)
  6. 怎样理解条件概率公式
  7. 渡鸦科技遭遇“黑天鹅”, 百度智能家居团队再次陷入僵局
  8. 2021年中国露营行业前景展望,未来的营地将更趋于功能化、主题化、教育化「图」
  9. Oracle中查看触发器使用到的SQL
  10. xamarin 检测网络连接