qt執行緒,執行緒池用到的一點問題

2021-07-10 04:12:17 字數 1344 閱讀 2581

總結一下最近使用qt多執行緒和執行緒池遇到的一些問題。

1.qthreadpool

執行緒池的作用是什麼呢?把多個執行緒丟個乙個執行緒池中,讓他對目前的執行緒進行管理。比如最大執行的執行緒數,以及最大執行緒數外的執行緒就處於等待狀態等。

要放到執行緒池中的執行緒必須繼承自qrunable類,這個類有個缺點,就是無法向外面傳送訊號。所以這個類不適合用來做介面的互動,而只是適合用來做資料的處理等。

2.qthread

使用qthread ,看了官方的文件,有兩種方法,採用乙個**類來對執行緒進行管理。

class

worker : public qobject

signals:

void resultready(const

qstring &result);

}; class

controller : public qobject

~controller

() public slots:

void handleresults(const

qstring &);

signals:

void operate(const

qstring &

但是我自己有個疑惑,就是這個是乙個單獨的執行緒,還是乙個多執行緒。 當在主線程中,連續傳送operator的操作的時候,處理的只有乙個執行緒呢?還是多個執行緒進行處理的呢?

第二種就是

class

workerthread : public qthread

signals:

void resultready(const

qstring &s);

}; void myobject::startworkinathread()

{ workerthread *workerthread = new workerthread

(this);

connect(workerthread, signal(resultready(qstring)), this, slot

(handleresults(qstring)));

connect(workerthread, signal(finished()), workerthread, slot

(deletelater()));

workerthread->

繼承自乙個qthread,如果需要乙個執行緒,那麼就new乙個執行緒,而這個指標的釋放,交給了qt自動釋放。也不用管指標等問題。這個方法相對來說比較好用點,但是利用這樣的執行緒如何控制多執行緒呢? 比如有20組資料,我們只想開5個執行緒來進行處理,那麼我們該如何去處理這個執行緒呢?

Qt的執行緒池QThreadPool

執行緒可以幫助我們處理耗時的操作以防止介面卡死,也可以提高程式的併發性。但執行緒也不是建立越多越好,因為建立 銷毀執行緒以及切換執行緒都是需要消耗資源的。執行緒池技術的出現就是為了解決這個問題。執行緒池維護一定數量的執行緒,並充分使用它們。qt封裝的執行緒池類是qthreadpool,它的使用需要q...

關於執行緒的一點補充

public class startdead extends thread public static void main string args 不要對處於死亡狀態的執行緒呼叫start 方法,程式只能對新建狀態的執行緒呼叫start 方法 對於新建狀態的執行緒兩次呼叫start 方法也是錯誤的,...

多執行緒的一點想法

一直被多種途徑告之多執行緒是個好東西,很好很好,一定要會。但是它到底是怎樣的?如何去用?卻一直不慎了解。最近通過解決c ui卡死這個問題,對多執行緒有了一點感覺。打個比喻吧。中秋快來了,你提著大包小包去趕車回家,這個時候你感覺負擔很大很累走不動,然後你請了兩個樵夫來幫你提東西,現在你輕鬆了。但是到了...