简介
QtConcurrent
命名空间提供了高级API,可以在不使用低级别线程原语(如互斥锁,读写锁,等待条件或信号量)的情况下编写多线程程序。 使用QtConcurrent
编写的程序会根据可用的处理器内核数自动调整使用的线程数。 这意味着今后编写的应用程序将在未来部署到多核系统时可以充分利用更多的处理器内核。
依赖
如要使用QtConcurrent
,需要在Qt工程中加入concurrent
模块,在qmake
中写入如下:
QT += concurrent
之后便可以在QtConcurrent
命名空间使用。
基础梳理
QtConcurrent
包含用于并行列表处理的函数式编程风格API,包括为共享内存(非分布式)系统所实现的MapReduce
和FilterReduce
以及用于在GUI应用程序中管理异步计算的类:
- Concurrent
Map
和Map-Reduce
QtConcurrent::map()
将函数应用于容器中的每个项目,并就地修改项目。QtConcurrent::mapped()
就像map()
,不同之处在于它返回一个只包含修改内容的新容器。QtConcurrent::mappedReduced()
类似于mapped()
,除了修改后的结果被减少或组合成单个结果。
- Concurrent
Filter
和Filter-Reduce
QtConcurrent::filter()
根据过滤函数从容器中删除所有满足要求的项目。QtConcurr