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

  • 相关阅读:
    U盘 格式化 ext3 ext4
    MBR
    CentOS开机的时候卡在进度条一直进不去 F5(是关键)
    redis储存中文,客服端读取出现乱码
    redis 做为缓存服务器 注项!
    redis监控
    keepalived virtual_router_id 44
    你真的会用Gson吗?Gson使用指南
    你真的会用Retrofit2吗?Retrofit2完全教程
    Kotlin 初级读本
  • 原文地址:https://www.cnblogs.com/itrena/p/5938238.html
Copyright © 2011-2022 走看看