總結一下最近使用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卡死這個問題,對多執行緒有了一點感覺。打個比喻吧。中秋快來了,你提著大包小包去趕車回家,這個時候你感覺負擔很大很累走不動,然後你請了兩個樵夫來幫你提東西,現在你輕鬆了。但是到了...