Qt Concurrent 模塊提供高級 API,使無需使用如互斥、讀寫鎖、等待條件或信號量的低級綫程原語,編寫多綫程程序成為可能。采用 Qt Concurrent 編寫的程序,會根據可用處理器核心數自動調整所用綫程數。這意味著,今天編寫的應用程序可繼續延伸,當將來部署在多核係統時。
Qt Concurrent 包括用於並行列錶處理的功能性編程樣式 API,包括用於共享內存 (非分布式) 係統的 MapReduce 和 FilterReduce 實現,及在 GUI 應用程序中用於管理異步計算的類:
Qt Concurrent 支持幾種 STL 兼容容器和迭代器類型,但最適閤處理擁有隨機訪問迭代器的 Qt 容器,例如 QList 。映射和過濾函數接受容器及開始/結束迭代器兩者。
STL 迭代器支持概述:
| 迭代器類型 | 範例類 | 支持狀態 |
|---|---|---|
| 輸入迭代器 | 不支持 | |
| 輸齣迭代器 | 不支持 | |
| 轉發迭代器 | std::forward_list | 支持 |
| 雙嚮迭代器 | std::list | 支持 |
| 隨機訪問迭代器 | QList , std::vector | 支持並推薦 |
Random access iterators can be faster in cases where Qt Concurrent is iterating over a large number of lightweight items, since they allow skipping to any point in the container. In addition, using random access iterators allows Qt Concurrent to provide progress information through QFuture::progressValue () 和 QFutureWatcher::progressValueChanged ().
非原位修改函數 (譬如 mapped() 和 filtered()) 會拷貝容器,當調用時。若使用的是 STL 容器,此拷貝操作可能需要一些時間,在這種情況下,我們推薦指定開始和結束迭代器為代替容器。
使用 Qt 模塊要求直接或透過其它依賴鏈接到模塊庫。一些構建工具為此有貢獻支持,包括 CMake and qmake .
使用
find_package()
命令定位所需模塊組件在
Qt6
包:
find_package(Qt6 REQUIRED COMPONENTS Concurrent) target_link_libraries(mytarget PRIVATE Qt6::Concurrent)
另請參閱 構建采用 CMake 概述。
要配置采用 qmake 構建模塊,添加模塊作為值為
QT
變量在工程的 .pro 文件:
QT += concurrent
Qt Concurrent 的變化 列齣瞭 Qt 的 Qt 6 係列在模塊 API 和功能上所做齣的重要改變。
Qt Concurrent 模塊在商業許可下是可用的來自 Qt 公司 。此外,它在自由軟件許可下也是可用的: GNU LGPL (次一般公共許可) 第 3 版 ,或 GNU GPL (一般公共許可) 第 2 版 。見 Qt 許可 進一步瞭解細節。