Qt 之 Concurrent 1、【纲】Concurrent

Qt 之 Concurrent

Getting Started

​ QtConcurrent命名空间提供了高级api,使编写多线程程序成为可能,而无需使用低级别线程原语,如互斥锁、读写锁、等待条件或信号量。用QtConcurrent编写的程序会根据可用的处理器核数自动调整使用的线程数。这意味着今天编写的应用程序在将来部署到多核系统时将继续扩展。

​ QtConcurrent 包括用于并行列表处理的函数式编程风格 API,包括用于共享内存(非分布式)系统的 MapReduce 和 FilterReduce 实现,以及用于管理 GUI 应用程序中的异步计算的类:

  • Concurrent Map and Map-Reduce
    • QtConcurrent::map() 将函数应用于容器中的每个项目,就地修改项目。
    • QtConcurrent::mapped() 与 map() 类似,除了它返回一个带有修改的新容器。
    • QtConcurrent::mappedReduced() 与mapped() 类似,只是修改后的结果被缩减或折叠成单个结果。
  • Concurrent Filter and Filter-Reduce
    • QtConcurrent::filter() 根据过滤器函数的结果从容器中删除所有项目。
    • QtConcurrent::filtered() 与 filter() 类似,除了它返回一个带有过滤结果的新容器。
    • QtConcurrent::filteredReduced() 与filtered() 类似,不同之处在于过滤的结果被减少或折叠成单个结果。
  • Concurrent Run
    • QtConcurrent::run() 在另一个线程中运行一个函数。
  • QFuture
    • QFuture 表示异步计算的结果。
    • QFutureIterator 允许迭代通过 QFuture 可用的结果。
    • QFutureWatcher 允许使用信号和槽来监控 QFuture。
    • QFutureSynchronizer 是一个方便的类,可以自动同步多个 QFuture。

​ Qt Concurrent 支持多种与 STL 兼容的容器和迭代器类型,但最适合具有随机访问迭代器的 Qt 容器,例如 QList 或 QVector。 map 和 filter 函数接受 容器 和 表示开始与结束的迭代器。

STL Iterator support overview:

Iterator TypeExample classesSupport status
Input IteratorNot Supported
Output IteratorNot Supported
Forward Iteratorstd::slistSupported
Bidirectional IteratorQLinkedList, std::listSupported
Random Access IteratorQList, QVector, std::vectorSupported and Recommended

​ 在 Qt Concurrent 迭代大量轻量级项目的情况下,随机访问迭代器可以更快,因为它们允许跳到容器中的任何点。 此外,使用随机访问迭代器允许 Qt Concurrent 通过 QFuture::progressValue() 和 QFutureWatcher::progressValueChanged() 提供进度信息。

​ 非就地修改函数( 例如,mapped() 和 filtered() )在调用时会生成容器的副本。 如果您使用 STL 容器,此复制操作可能需要一些时间,在这种情况下,我们建议改为指定容器的开始和结束迭代器。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值