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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Qt 并行计算 Concurrent Run的翻译

發布時間:2025/3/15 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Qt 并行计算 Concurrent Run的翻译 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

資料來源:https://doc.qt.io/qt-5/qtconcurrentrun.html

Concurrent Run的簡介:

QtConcurrent::run() 是開啟單獨一個線程來運行。返回值可以通過QFuture API來調取。

在單獨的線程中運行
QtConcurrent::run();

extern void aFunction(); QFuture<void> future = QtConcurrent::run(aFunction);

run()函數將在默認的QThreadPool 中單獨一個線程來運行。可以通過QFuture和QFutureWatcher 類來查看此函數run()運行的狀態。

可以專門開設線程池(pool),如下:

extern void aFunction(); QThreadPool pool; QFuture<void> future = QtConcurrent::run(&pool, aFunction);

run()函數中的參數傳遞:
例如:

extern void aFunctionWithArguments(int arg1, double arg2, const QString &string);int integer = ...; double floatingPoint = ...; QString string = ...;QFuture<void> future = QtConcurrent::run(aFunctionWithArguments, integer, floatingPoint, string);

當run函數運行的時候,這些參數將加載到線程中來運行,

函數值的返回:

值的返回是通過QFuture 來實現的:

extern QString functionReturningAString(); QFuture<QString> future = QtConcurrent::run(functionReturningAString); ... QString result = future.result();

有參數情況下:

extern QString someFunction(const QByteArray &input);QByteArray bytearray = ...;QFuture<QString> future = QtConcurrent::run(someFunction, bytearray); ... QString result = future.result();

注意: QFuture::result() 函數將阻塞,一直等到result結果出來。可以通過QFutureWatcher 來獲取 執行完畢和計算結果的通知。

run函數的其他特性:
使用成員函數:

QtConcurrent::run() 同樣接受指向成員函數的指針。這樣,run函數的第一個參數可以是指向常量的指針,或者指向一個類的對象。

如果傳遞是常量,通常是調入常量處理的函數指針。
如果傳遞是指針,同時是跳入非常量處理的函數指針。

例如:通過調入QByteArray::split() (a const member function) 在單獨一個線程中處理:

// call 'QList<QByteArray> QByteArray::split(char sep) const' in a separate thread QByteArray bytearray = "hello world"; QFuture<QList<QByteArray> > future = QtConcurrent::run(bytearray, &QByteArray::split, ','); ... QList<QByteArray> result = future.result();

調入Calling a non-const member 函數如下:

// call 'void QImage::invertPixels(InvertMode mode)' in a separate thread QImage image = ...; QFuture<void> future = QtConcurrent::run(&image, &QImage::invertPixels, QImage::InvertRgba); ... future.waitForFinished(); // At this point, the pixels in 'image' have been inverted

支持使用Lamdba 函數如下:

QFuture<void> future = QtConcurrent::run([=]() {// Code in this block will run in another thread }); ...

本篇翻譯完畢!

有關并行計算的應用,請看Qt并行計算圓周率示例

總結

以上是生活随笔為你收集整理的Qt 并行计算 Concurrent Run的翻译的全部內容,希望文章能夠幫你解決所遇到的問題。

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