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

  • 相关阅读:
    大牛总结的Linux提权Exp合集
    CTF中图片隐藏文件分离方法总结
    解压报错gzip: stdin: not in gzip format tar: Child returned status 1 tar: Error is not recoverable: exiting now的解决方法
    CTF中常见Web源码泄露总结
    解决“当前扩展缓存策略没有进行注册”的错误
    【红色警报】XXE 高危漏洞将大面积影响微信支付安全,可能导致系统沦陷,请升级你的系统!
    Senparc.Weixin SDK v5.0 升级公告
    使用 VSTS 进行 CI 的过程中,无法识别 .NET Core 2.x 的情况处理
    .net core DI 注册 Lazy<> 类型
    【备忘】ASP.NET MVC 5 升级到 ASP.NET Core MVC 的部分变化
  • 原文地址:https://www.cnblogs.com/itrena/p/5938238.html
Copyright © 2020-2023  润新知