Qt之Concurrent框架
简述
QtConcurrent命名空间提供了一个高级API来编写多线程程序,而无需使用低级线程原语,例如:互斥、读写锁、等待条件或信号量。使用QtConcurrent编写的程序使用的线程数量会自动根据可用的处理器数量进行调整,这意味着,当在未来部署多核系统时,今天编写的应用程序将继续适应。
Qt Concurrent
QtConcurrent为并行列表处理包含了函数式编程风格APIs,包括用于共享内存(非分布式)系统的一个MapReduce和FilterReduce实现,以及用于管理GUI应用程序异步计算的类:
Concurrent Map and Map-Reduce
- QtConcurrent::map():适用于一个容器中的所有item元素,直接修改items。
- QtConcurrent::mapped():就像map(),只是它返回一个修改后的新容器。
- QtConcurrent::mappedReduced():就像mapped(),只是修改后的结果减少或折叠成一个单一的结果。
Concurrent Filter and Filter-Reduce
- QtConcurrent::filter():从一个容器中删除所有items基于过滤器函数的结果。
- QtConcurrent::filtered():就像filter(),只是它以过滤后的结果返回一个新容器。
- QtConcurrent::filteredReduced():就像filtered(),只是过滤后的结果减少或折叠成一个单一的结果。
Concurrent Run
- QtConcurrent::run():在另一个线程中运行一个函数。
QFuture:表示异步计算的结果。
- QFutureIterator:允许通过QFuture遍历可用的结果。
- QFutureWatcher:允许使用信号槽来监控一个QFuture。
- QFutureSynchronizer:是一个方便的类,用于一些QFutures自动同步。
Qt Concurrent支持多种兼容STL的容器和迭代器类型,但与具有随机访问迭代器效果最佳,例如:QList或QVector。map和filter函数都接受容器和begin/end迭代器。
STL迭代器支持概述:
迭代器类型 | 示例类 | 支持状态 |
---|---|---|
Input Iterator | 不支持 | |
Output Iterator | 不支持 | |
Forward Iterator | std::slist | 支持 |
Bidirectional Iterator | QLinkedList, std::list | 支持 |
Random Access Iterator | QList, QVector, std::vector | 支持和推荐 |
随机访问迭代器在Qt Concurrent遍历大量轻量级items时可以更快,因为它们允许跳过任何容器中的指针。此外,使用随机访问迭代器允许Qt Concurrent提供进展信息,通过QFuture::progressValue()和QFutureWatcher::progressValueChanged()。
非直接修改的函数,例如:mapped()和filtered()当调用时,复制一个容器。如果你正在使用的STL容器,这个副本操作可能需要一段时间,在这种情况下,建议指定开始和结束容器的迭代器。
Qt之Concurrent框架的更多相关文章
- Qt之Concurrent Map和Map-Reduce
简述 QtConcurrent::map().QtConcurrent::mapped()和QtConcurrent::mappedReduced()函数在一个序列中(例如:QList或QVector ...
- Qt图形视图框架公开课资料
接受CSDN学院的邀请,讲一次公开课,主题是Qt图形视图框架,报名链接在这里:http://edu.csdn.net/huiyiCourse/detail/228. 内容有两部分:自定义Item和拖放 ...
- Qt的Graphics-View框架和OpenGL结合详解
Qt的Graphics-View框架和OpenGL结合详解 演示程序下载地址:这里 程序源代码下载地址:这里 这是一篇纯技术文,介绍了这一个月来我抽时间研究的成果. Qt中有一个非常炫的例子:Boxe ...
- 用Qt图形视图框架开发拼图游戏
用Qt的图形视图框架(Graphics View Framework)做了一个拼图游戏DEMO,演示了: QGraphicsView.QGraphicsScene.QGraphicsItem的基本用法 ...
- Qt之动画框架
简述 Qt动画框架旨在为创建动画和平滑的GUI提供了一种简单的方法.通过Qt动画属性,该框架为部件和其它QObject对象的动画操作提供了非常大的自由性,框架也可以被用于图形视图框架中,动画框架中许多 ...
- QT 图形视图框架
https://blog.csdn.net/qq769651718/article/details/79357936 使用QPushButton.QLabel.QCheckBox等构成GUI的控件或自 ...
- Qt Model View 框架
Model-View及Qt实现 Model-View-Controller架构最早出现在SmallTalk语言中,至今出现了很多变体. Model是负责维护数据(如管理数据库),View负责显示与用户 ...
- Qt模型/视图框架----简单的例子
#include<qapplication.h> #include<qfilesystemmodel.h> #include<qtreeview.h> #inclu ...
- Qt之QThread(深入理解)
简述 为了让程序尽快响应用户操作,在开发应用程序时经常会使用到线程.对于耗时操作如果不使用线程,UI界面将会长时间处于停滞状态,这种情况是用户非常不愿意看到的,我们可以用线程来解决这个问题. 前面,已 ...
随机推荐
- 高通APQ8074 spi 接口配置
高通APQ8074 spi 接口配置 8074 平台含有两个BLSP(BAM Low-Speed Peripheral) , 每一个BLSP含有两个QUP, 每一个QUP可以被配置为I2C, SPI, ...
- 【Unity3D游戏开发】基础知识之Tags和Layers (三二)[转]
Tags和Layers分别表示是Unity引擎里面的标签和层,他们都是用来对GameObject进行标识的属性,Tags常用于单个GameObject,Layers常用于一组的GameObject.添 ...
- Set Font Properties On Mouse Hover Of Push Button And Text Items At Run time In Oracle Forms
Change the font size and weight of text items and push buttons on mouse hover in Oracle Forms. An ...
- 超强vim配置
在网上找vim的配置,自己配置的特别丑 安装起来也超级方便. #!/bin/bash echo "安装将花费一定时间,请耐心等待直到安装完成^_^" if which apt-ge ...
- jquery获取当前时间
一.获取当前时间 new Date()方法---------得到结果是当前电脑时间如2011-11-6,10:07 二.获取有个固定的时间方法---------var endtime=new Date ...
- jQuery的deferred对象
应用场景:处理异步任务 看到一篇阮一峰老师的博客挺好的讲的就是jQuery的deferred对象.坦诚讲之前没有怎么用过这个东东呢. 摘其中几点记录下 (1) $.Deferred() 生成一个def ...
- FlashPlayer for Android
1. Manually install on Android devices 教程地址:“https://helpx.adobe.com/flash-player/kb/installing-flas ...
- C# 上传RAR文件 解压 获取解压后的文件名称
此方法适用于C盘windows文件夹中有WinRAR.exe文件 if (fileExt.ToUpper() == ".RAR") { string zpath = Server. ...
- 关于level DB的相关资料
可以参考: http://blog.csdn.net/houzengjiang/article/details/7718548 http://www.cnblogs.com/haippy/archiv ...
- java中compareTo和compare方法之比较
这两个方法经常搞混淆,现对其进行总结以加深记忆. compareTo(Object o)方法是java.lang.Comparable接口中的方法,当需要对某个类的对象进行排序时,该类需要实现Comp ...