1.從qobject派生乙個類,將耗時的工作寫在該類的槽函式中。
2.將派生類物件移動到乙個qthread中,該執行緒需要start。(這一步使用movetothread)
3.通過訊號連線派生類的槽函式,並通過訊號觸發槽函式。(槽函式在子執行緒中執行)
#ifndef worker_h
#define worker_h
#include
class
worker
:public qobject
;#endif
// worker_h
worker.cpp
#include
"worker.h"
#include
worker::
worker
(qobject *parent)
:qobject
(parent)
worker::
~worker()
void worker::
dosomething()
qthread *thread =
new qthread;
worker*worker =
new worker;
connect
(worker,
signal
(finished()
),thread,
slot
(quit()
));//新增
connect
(thread,
signal
(started()
),worker,
slot
(dosomething()
));connect
(thread,
signal
(finished()
),worker,
slot
(deletelater()
));connect
(thread,
signal
(finished()
),thread,
slot
(deletelater()
)); worker-
>
movetothread
(thread)
; thread-
>
start()
;
注意:由於worker#dosomething()
執行完畢後,執行緒並不會結束,這樣若不做額外控制,那麼就會導致thread
和worker
的記憶體洩漏。所以需要在worker
物件的槽函式dosomething()
結束的時候,應發射結束訊號來間接控制線程!
QT 多執行緒 使用UI
直接上 qt的ui操作必須在主線程做的,分支執行緒只能傳送訊息給主線程進行引導操作。所以平常我們的 都是直接使用乙個執行緒來調動ui,但是不同的執行緒同時需要使用ui來顯示結果之類的就需要相互協調 如果沒有invoke之類的方法,可以考慮直接使用qt 的qthread 直接使用thread會衝突 1...
Qt 多執行緒使用moveToThread
qt有兩種多執行緒的方法,其中一種是繼承qthread的run函式,另外一種是把乙個繼承於qobject的類用movetothread函式轉移到乙個thread裡。qt4.8之前都是使用繼承qthread的run這種方法,但是qt4.8之後,qt官方建議使用第二種方法。具體的使用步驟如下 1.從qo...
C 基礎 多執行緒 十九
單執行緒 只有乙個執行緒 主線程 弊端,乙個時間只能呼叫乙個函式方法,如果正在列印時候去關閉程式,會關閉不了,出現假死現象 執行緒分為前台執行緒和後台執行緒 預設建立的都是前台執行緒 前台執行緒 只有多有的前台執行緒都關閉了才能完成程式的關閉 後台執行緒 只要所有的前台執行緒結束,後台執行緒自動結束...