三十九 Qt 多執行緒使用moveToThread

2021-10-03 13:44:01 字數 1508 閱讀 5341

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()執行完畢後,執行緒並不會結束,這樣若不做額外控制,那麼就會導致threadworker的記憶體洩漏。所以需要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 基礎 多執行緒 十九

單執行緒 只有乙個執行緒 主線程 弊端,乙個時間只能呼叫乙個函式方法,如果正在列印時候去關閉程式,會關閉不了,出現假死現象 執行緒分為前台執行緒和後台執行緒 預設建立的都是前台執行緒 前台執行緒 只有多有的前台執行緒都關閉了才能完成程式的關閉 後台執行緒 只要所有的前台執行緒結束,後台執行緒自動結束...