Qt之Concurrent框架
2023-09-27 14:19:43 时间
简述
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容器,这个副本操作可能需要一段时间,在这种情况下,建议指定开始和结束容器的迭代器。
相关文章
- QT5入门之23 -QT串口编程(转)
- Qt之图形视图框架
- Qt Assistant介绍
- 【Qt开发】解决Qt程序在Linux下无法输入中文的办法
- 基于c++/opencv实现的机器视觉标准函数,可以快速应用到qt/MFC等框架
- PyQt(Python+Qt)学习随笔:Designer中ItemViews类部件的frameShadow属性
- 【Qt】打开现有 Qt 项目 ( 打开已存在的项目 | 运行打开的项目 )
- 76.qt qml-QianWindow开源炫酷界面框架(支持白色暗黑渐变自定义控件均以适配)
- 1.QT-第一个程序 Hello QT , 以及QT creator介绍
- qt for Android点击edit输入框,弹出系统默认输入法数字键盘界面
- Qt 2D绘图之六:图形视图框架的事件处理与传播
- Qt快速入门之三:Qt项目建立、编译、运行和源码详解
- QT Desinger设计窗体应用程序框架