Qt文档阅读笔记-Qt Concurrent介绍及简单使用
目錄
Getting Started
博主栗子
Getting Started
QtConcurrent名稱空間提供了高等級的API,這些高級API可以寫多線程的程序,并且可以不使用低等級線程所要的東西,比如互斥鎖,讀寫鎖,等待條件,信號量。使用了QtConcurrent的程序通過處理器空閑的核數自動使用線程的數量。這意味著為來的程序都會向著多線程發展。
QtConcurrent包含并行處理風格的API函數,包括了共享內存系統里MapReduce,FilterReduce的實現,以及在GUI程序中管理異步計算的類:
Concurrent Map and Map-Reduce
QtConcuurrent::map()對容器中每一項都使用一個函數,可以實現原地修改。
QtConcuurrent::maped()與map()相似,但他會返回一個修改了后的新容器。
QtConcuurrent::mappedReduced()與maped()相似,除了修改的結果會被減少或壓縮成一個結果。
Concurrent Filter and Filter-Reduce
QtConcurrent::filter()當過濾函數被調用的時候從容器中移除所有的items。
QtConcuurent::filtered()與filter()相似,除了返回一個被過濾后的新容器。
QtConcurrent::filteredReduced()與filtered()相似,除了過濾后的結果會被減少或壓縮成新的結果。
Concurrent Run
QtConcurrent::run()在另一個線程中調用一個函數。
QFuture表示異步計算的結果。
QFutureIterator允許迭代器遍歷QFuture獲取數據。
QFutureWatcher運行使用信號與槽監視一個QFuture。
QFutureSynchronizer這個類十分方便的能讓幾個QFuture進行同步。
QtConcurrent支持幾個STL容器和迭代器,但最好是與Qt的容器一起工作,因為這些容器有隨機訪問(通過下標直接訪問)的迭代器,比如Qlist或QVector。map和filter只支持begin/end這種迭代。
支持STL迭代器的圖表:
QtConcuurrent在迭代大量輕量級的item的地方,隨機訪問迭代器在某些情況下更快,因為他們可以進行下標訪問容器。除此之外使用隨機訪問迭代器允許QtConcurrent通過QFuture::progressValue()與QFutureWatcher::progressValueChanged()提供一些進度信息。
不能實現原地修改的函數比如mapped()和filtered(),他們在調用的時候要拷貝到容器里面。如果你使用STL的容器去拷貝,拷貝時會要開銷一些時間,這種情況下,Qt建議我們用開始和結束迭代器進行拷貝。
?
博主栗子
來個關于QtConcurrent::run簡單栗子:
代碼如下:
widget.h
#ifndef WIDGET_H #define WIDGET_H#include <QWidget>class MyWorker;namespace Ui { class Widget; }class Widget : public QWidget {Q_OBJECTpublic:explicit Widget(QWidget *parent = 0);~Widget();private:Ui::Widget *ui; };#endif // WIDGET_Hmain.cpp
#include "widget.h" #include <QApplication>int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); }widget.cpp
#include "widget.h" #include "ui_widget.h" #include <QtConcurrent> #include <QDebug>void print(){for(int i=0;i<10000;i++){QThread::msleep(100);qDebug()<<"The value is "<<i;} }Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget) {ui->setupUi(this);QtConcurrent::run(print); }Widget::~Widget() {delete ui; }?
總結
以上是生活随笔為你收集整理的Qt文档阅读笔记-Qt Concurrent介绍及简单使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Qt学习笔记-QSS装饰控件
- 下一篇: Qt工作笔记-对qmake的认识【两篇转