Qt Concurrent

Qt Concurrent 模块提供了高级应用程序接口,使编写多线程程序成为可能,而无需使用互斥、读写锁、等待条件或 Semaphores 等低级线程原语。使用Qt Concurrent 编写的程序会根据可用处理器内核的数量自动调整使用的线程数。这意味着现在编写的应用程序将来在多核系统上部署时仍能继续扩展。

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

Qt Concurrent map 和 filter 函数支持几种 STL 兼容的容器和迭代器类型,但与具有随机访问迭代器的 Qt 容器(如 )配合使用效果最佳。map 和 filter 函数同时接受容器和开始/结束迭代器。QList

STL 迭代器支持概述:

迭代器类型示例类支持状态
输入迭代器不支持
输出迭代器不支持
前向迭代器std::forward_list支持
双向迭代器std::list支持
随机存取迭代器QList,std::矢量支持并推荐

Qt Concurrent 对大量轻量级项目进行迭代时,随机存取迭代器的速度会更快,因为它们允许跳转到容器中的任意点。此外,使用随机存取迭代器还可以让Qt Concurrent 通过QFuture::progressValue() 和QFutureWatcher::progressValueChanged() 提供进度信息。

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

使用模块

使用 Qt 模块需要直接或通过其他依赖关系与模块库链接。有几种构建工具为此提供了专门支持,包括CMakeqmake

使用 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 Company 的商业许可下使用。此外,它还受自由软件许可证的保护:GNU 宽通用公共许可证第 3 版GNU 通用公共许可证第 2 版。更多详情,请参阅Qt 许可

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.