歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Qt學習筆記之Concurrent框架

Qt學習筆記之Concurrent框架

日期:2017/3/1 9:13:28   编辑:Linux編程

簡述

Qt Concurrent命名空間提供了一個高級API來編寫多線程程序,而無需使用低級線程原語,例如:互斥、讀寫鎖、等待條件或信號量。使用QtConcurrent編寫的程序使用的線程數量會自動根據可用的處理器數量進行調整,這意味著,當在未來部署多核系統時,今天編寫的應用程序將繼續適應。

  • 簡述
  • Qt Concurrent
  • 更多參考

Qt Concurrent

QtConcurrent為並行列表處理包含了函數式編程風格APIs,包括用於共享內存(非分布式)系統的一個MapReduce和FilterReduce實現,以及用於管理GUI應用程序異步計算的類:

  • Concurrent Map and Map-Reduce

    • QtConcurrent::map():適用於一個容器中的所有item元素,直接修改items。
    • QtConcurrent::mapped():就像map(),只是它返回一個修改後的新容器。
    • QtConcurrent::mappedReduced():就像mapped(),只是修改後的結果減少或折疊成一個單一的結果。
  • Concurrent Filter and Filter-Reduce

    • QtConcurrent::filter():從一個容器中刪除所有items基於過濾器函數的結果。
    • QtConcurrent::filtered():就像filter(),只是它以過濾後的結果返回一個新容器。
    • QtConcurrent::filteredReduced():就像filtered(),只是過濾後的結果減少或折疊成一個單一的結果。
  • Concurrent Run

    • QtConcurrent::run():在另一個線程中運行一個函數。
  • QFuture:表示異步計算的結果。

  • QFutureIterator:允許通過QFuture遍歷可用的結果。
  • QFutureWatcher:允許使用信號槽來監控一個QFuture。
  • QFutureSynchronizer:是一個方便的類,用於一些QFutures自動同步。

Qt Concurrent支持多種兼容STL的容器和迭代器類型,但與具有隨機訪問迭代器效果最佳,例如:QList或QVector。map和filter函數都接受容器和begin/end迭代器。

STL迭代器支持概述:

迭代器類型示例類支持狀態 Input Iterator 不支持 Output Iterator 不支持 Forward Iterator std::slist 支持 Bidirectional Iterator QLinkedList, std::list 支持 Random Access Iterator QList, QVector, std::vector 支持和推薦

隨機訪問迭代器在Qt Concurrent遍歷大量輕量級items時可以更快,因為它們允許跳過任何容器中的指針。此外,使用隨機訪問迭代器允許Qt Concurrent提供進展信息,通過QFuture::progressValue()和QFutureWatcher::progressValueChanged()。

非直接修改的函數,例如:mapped()和filtered()當調用時,復制一個容器。如果你正在使用的STL容器,這個副本操作可能需要一段時間,在這種情況下,建議指定開始和結束容器的迭代器。

Copyright © Linux教程網 All Rights Reserved