QtConcurrent系列之run函式建立多執行緒

2021-08-28 11:45:41 字數 1666 閱讀 8868

在qt多執行緒程式設計中,我們一般使用qthread,qrunnable等類來實現多執行緒。除此之外,qt還提供了乙個更高階的實現多執行緒的方式,那就是qtconcurrent框架,qtconcurrent框架中提供了許多高階的,效能更好的多執行緒api函式,這些函式非常方便使用。本文重點介紹qtconcurrent:run函式,使用該函式可以方便的建立乙個多執行緒。

使用qtconcurrent之前,需要在pro工程檔案中新增 qt += concurrent,並且在標頭檔案加上#include ,qtconcurrent:run函式有兩個過載,分別是:

qfuture qtconcurrent:

:run

(function function,..

.);qfuture qtconcurrent:

:run

(qthreadpool *pool, function function,..

.);

第乙個函式等同於qtconcurrent::run(qthreadpool::globalinstance(), function, …);使用的時候只需往該函式傳遞乙個函式物件即可,比如:

void

myfunc

(int max)

}#include

#include

#include

intmain

(int argc,

char

*argv)

也可以使用自己定義的qthreadpool物件並傳遞給run函式。

#include

#include

#include

intmain

(int argc,

char

*argv)

qtconcurrent:run的返回值是qfurutre,是乙個監控執行緒並非同步獲取執行緒結果的類,這裡暫不介紹了。

我們也可以向qtconcurrent:run裡面的執行緒函式傳遞引數。

void

myfunc

(int max)

}#include

#include

intmain

(int argc,

char

*argv)

{(argc, argv)

; qtconcurrent:

:run

(myfunc,20);

return a.

exec()

; }

另外,qtconcurrent:run函式也可以接受成員函式,但是要求傳遞的變數需要是常量引用或者指標,傳遞的函式是常量成員函式時則傳遞常量引用,函式是非常量成員函式時則傳遞指標。比如:

qbytearray bytearray =

"hello world"

; qfuture

> future = qtconcurrent:

:run

(bytearray,

&qbytearray:

:split,

',');.

..qlist result = future.

result()

;

QtConcurrent 之 Run 阻塞方式呼叫

一 說明 concurrent是併發的意思,qtconcurrent是乙個命名空間,提供了一些高階的 api,使得在編寫多執行緒的時候,無需使用低階執行緒原語,如讀寫鎖,等待條件或訊號。使用qtconcurrent編寫的程式會根據可用的處理器核心數自動調整使用的執行緒數。二 ifndef widge...

QT多執行緒 QtConcurrent併發

qt concurrent單獨模組 qfuture qtconcurrent run function function,qfuture qtconcurrent run qthreadpool pool,function function,include widget.h include incl...

OpenStack icehouse系列之問題處理

openstack icehouse系列之問題處理 眾所周知搭建是很容易的 往往排錯是很頭疼的 下面我分享下我在搭建的過程中遇到的問題和解決辦法。glance報錯以及解決方法 執行glance同步資料庫的時候 su s bin sh c glance manage db sync glance su...