QtConcurrent

QtConcurrent

yanboo 发表于 2010-06-10 11:40:00

Qt的多线程支持

Qt通过 平台独立的线程类,线程安全的事件投递,线程间signal-slot连接这几个技术实现多线程支持。 利用这些技术使得Qt能容易地开发出轻巧的多线程应用程序。多线程编程也能解决处理耗时操作时UI不能及时响应的问题。

早期的Qt多线程支持是编译时的一个可选项。从4.0开始,Qt的线程支持始终提供。


Concurrent Programming

名空间QtConcurren提供了一些高级API,使得写多线程程序可以不再使用像互斥、读写锁、等待条件、信号量等低级的多线程命令。用QtConcurrent写的程序可以根据内核数量自动调整线程数。这意味着今天写的应用程序将来可以部署在多核系统上。

QtConcurrent包含处理并行表的API( 函数式编程语言的风格),包括共享内存(非分布式)系统的映射归并和过滤归并的实现,还有GUI程序中管理异步运算的一些类:

  • QtConcurrent::map() 对一个容器中的每个元素执行一个函数,修改原始元素。
  • QtConcurrent::mapped() 与map()类似,但返回一个新的容器来保存答案,不改变原始列表
  • QtConcurrent::mappedReduced() 和mapped()类似,但修改的结果被化简或合并到一个单一结果上。
  • QtConcurrent::filter() 依据一个过滤函数的结果把容器中的所有结果移除。
  • QtConcurrent::filtered() 与filter()类似,但将过滤结果返回到一个新容器中。
  • QtConcurrent::filteredReduced() 与filtered类似,但将过滤结果归并或合并到一个单一结果上。
  • QtConcurrent::run() 在另一个线程中运行一个函数
  • QFuture 表示异步计算的结果。
  • QFutureIterator 允许迭代由QFuture返回的结果。
  • QFutureWatcher 允许用Signals-Slots监视QFutrue。
  • QFutureSynchronizer 用来自动同步几个QFuture类。

Qt Concurrent supports several STL-compatible container and iterator types, but works best with Qt containers that have random-access iterators, such as QList or QVector. The map and filter functions accept both containers and begin/end iterators.


你可能感兴趣的:(QtConcurrent)