在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...