【翻译】Qt Concurrent模块介绍

QtConcurrent (Qt并发)命名空间提供了高级 API,可以在不使用低级线程原语(例如互斥锁、读写锁、等待条件、信号量)的情况下编写多线程程序。使用 QtConcurrent 编写的程序会根据可用的处理器内核数量自动调整使用的线程数量。

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

1、Concurrent Map 和 Map-Reduce:

  • QtConcurrent::map() 将函数应用于容器中的每个项目,就地修改容器中的项目。
  • QtConcurrent::mapped() 与 map() 类似,除了它返回一个带有修改项目的新容器。
  • QtConcurrent::mappedReduced() 与mapped() 类似,只是修改后的结果被缩减或折叠成单个结果。

2、Concurrent Filter 和Filter-Reduce:

  • QtConcurrent::filter() 根据过滤器函数的结果从容器中删除所有项目。
  • QtConcurrent::filtered() 与 filter() 类似,除了它返回一个带有过滤结果的新容器。
  • QtConcurrent::filteredReduced() 与filtered() 类似,不同之处在于过滤的结果被减少或折叠成单个结果。

3、Concurrent Run:

  • QtConcurrent::run() 在另一个线程中运行一个函数。

4、QFuture 表示异步计算的结果。

5、QFutureIterator 允许迭代 QFuture 可用的结果。

6、QFutureWatcher 允许使用信号槽来监控 QFuture。

7、QFutureSynchronizer 是一个便捷类,可以自动同步多个 QFuture。

Qt Concurrent 支持多种与 STL 兼容的容器和迭代器类型,但最适合具有随机访问迭代器的 Qt 容器,例如 QList QVector map 和 filter 函数接受容器和begin/end迭代器。

迭代器支持概述:

迭代器类型示例是否支持
输入迭代器不支持
输出迭代器不支持
前向迭代器std::slist支持
双向迭代器QLinkedList、std::list支持
随机访问迭代器QList、QVector、std::vector支持且推荐使用

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

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

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值