日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Qt文档阅读笔记-Qt Concurrent介绍及简单使用

發(fā)布時間:2025/3/15 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Qt文档阅读笔记-Qt Concurrent介绍及简单使用 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目錄

Getting Started

博主栗子


Getting Started

QtConcurrent名稱空間提供了高等級的API,這些高級API可以寫多線程的程序,并且可以不使用低等級線程所要的東西,比如互斥鎖,讀寫鎖,等待條件,信號量。使用了QtConcurrent的程序通過處理器空閑的核數(shù)自動使用線程的數(shù)量。這意味著為來的程序都會向著多線程發(fā)展。

QtConcurrent包含并行處理風格的API函數(shù),包括了共享內存系統(tǒng)里MapReduce,FilterReduce的實現(xiàn),以及在GUI程序中管理異步計算的類:

Concurrent Map and Map-Reduce
QtConcuurrent::map()對容器中每一項都使用一個函數(shù),可以實現(xiàn)原地修改。
QtConcuurrent::maped()與map()相似,但他會返回一個修改了后的新容器。
QtConcuurrent::mappedReduced()與maped()相似,除了修改的結果會被減少或壓縮成一個結果。

Concurrent Filter and Filter-Reduce
QtConcurrent::filter()當過濾函數(shù)被調用的時候從容器中移除所有的items。
QtConcuurent::filtered()與filter()相似,除了返回一個被過濾后的新容器。
QtConcurrent::filteredReduced()與filtered()相似,除了過濾后的結果會被減少或壓縮成新的結果。

Concurrent Run
QtConcurrent::run()在另一個線程中調用一個函數(shù)。

QFuture表示異步計算的結果。

QFutureIterator允許迭代器遍歷QFuture獲取數(shù)據(jù)。

QFutureWatcher運行使用信號與槽監(jiān)視一個QFuture。

QFutureSynchronizer這個類十分方便的能讓幾個QFuture進行同步。

QtConcurrent支持幾個STL容器和迭代器,但最好是與Qt的容器一起工作,因為這些容器有隨機訪問(通過下標直接訪問)的迭代器,比如Qlist或QVector。map和filter只支持begin/end這種迭代。

支持STL迭代器的圖表:

QtConcuurrent在迭代大量輕量級的item的地方,隨機訪問迭代器在某些情況下更快,因為他們可以進行下標訪問容器。除此之外使用隨機訪問迭代器允許QtConcurrent通過QFuture::progressValue()與QFutureWatcher::progressValueChanged()提供一些進度信息。

不能實現(xiàn)原地修改的函數(shù)比如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_H

main.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介绍及简单使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。