Qt学习笔记之Concurrent框架

Qt Concurrent命名空间提供了一个高级API来编写多线程程序,而无需使用低级线程原语,例如:互斥、读写锁、等待条件或信号量。使用QtConcurrent编写的程序使用的线程数量会自动根据可用的处理器数量进行调整,这意味着,当在未来部署多核系统时,今天编写的应用程序将继续适应。

简述

Qt Concurrent

更多参考

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容器,这个副本操作可能需要一段时间,在这种情况下,建议指定开始和结束容器的迭代器。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/f644e3492d2326f370aed5abcfafadc0.html