Qt并发

Qt并发模块提供了高级API,使得无需使用诸如互斥锁、读写锁、等待条件或信号量的底层线程原语,即可编写多线程程序。使用Qt并发编写的程序将自动根据可用的处理器核心数调整使用的线程数。这意味着,今天编写的应用程序在部署到未来的多核系统中将继续扩展。

Qt并发包括用于并行列表处理的函数式编程样式API,包括专为共享内存(非分布式)系统设计的MapReduce和FilterReduce实现,以及用于在GUI应用程序中管理异步计算的类。

Qt并发支持几个与STL兼容的容器和迭代器类型,但最佳性能在与具有随机访问迭代器的Qt容器一起使用,例如QList。Map和filter函数接受容器和begin/end迭代器。

STL迭代器支持概览

迭代器类型示例类支持状态
输入迭代器不支持
输出迭代器不支持
正向迭代器std::slist支持
双向迭代器std::list支持
随机访问迭代器QList, std::vector支持且推荐

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

非就地修改函数(如mapped()和filtered())在调用时会创建容器的一个副本。如果你正在使用STL容器,这个复制操作可能需要一些时间,在这种情况下,我们建议指定容器的开始和结束迭代器。

使用模块

使用Qt模块需要链接到模块库,无论是直接链接还是通过其他依赖。包括CMake和qmake在内的几个构建工具都有专门的支持。

使用CMake进行构建

使用find_package()命令在Qt6软件包中查找所需的模块组件

find_package(Qt6 REQUIRED COMPONENTS Concurrent)
target_link_libraries(mytarget PRIVATE Qt6::Concurrent)

请参阅使用CMake进行构建概述。

使用qmake进行构建

为了使用qmake配置模块来构建,请将模块添加为项目.pro文件中QT变量的值

QT += concurrent

示例

模块发展

Qt Concurrent 的更改列出了为 Qt 6 系列Qt所做的模块 API 和功能的重要更改。

许可证

Qt Concurrent 模块可以从 Qt 公司 获得商业许可证。此外,它也可在免费软件许可证下获得:GNU Lesser General Public License版本3或GNU General Public License版本2。有关更多信息,请参阅Qt 许可证

© 2024 Qt 公司有限。本文档中的文档贡献是各自所有者的版权。本文档按自由软件基金会发布的GNU自由文档许可证版本1.3的条款提供。Qt及其相关标志是芬兰的Qt公司及其它国家/地区的商标。所有其他商标均为各自所有者的财产。