QT 多執行緒訊號與槽(二)

2021-06-20 01:10:43 字數 2393 閱讀 3455

乙個主線程,乙個次執行緒,主線程向次執行緒傳送訊號

mythread.h

#include

#include

class

mythread

:public

qthread

;
mythread.cpp

#include

"mythread.h"

#include

mythread::mythread()
void

mythread::run()

void

mythread::receive_main_signal(int

a)

class

mainwindow

:public

qmainwindow

;
mainwindow.cpp
#include

"mainwindow.h"

#include

"ui_mainwindow.h"

#include

mainwindow::mainwindow(qwidget

*parent):

qmainwindow(parent),

ui(new

ui::mainwindow)

mainwindow::~mainwindow()
void

mainwindow::start_thread()

}
列印結果:
mythread: 3063412432 

mainwindow: 3063412432 

from mainwindow: 3063412432 

i= 0 

run: 3018308496 

from mainwindow: 3063412432 

i= 1 

from mainwindow: 3063412432 

i= 2 

from mainwindow: 3063412432 

i= 3 

from mainwindow: 3063412432 

i= 4 

from mainwindow: 3063412432 

i= 5 

from mainwindow: 3063412432 

i= 6 

from mainwindow: 3063412432 

i= 7 

from mainwindow: 3063412432 

i= 8 

from mainwindow: 3063412432 

i= 9

結論:主線程向子執行緒傳送訊號,子執行緒對應的槽函式實現還是在主線程中完成的。如何使子執行緒的槽函式在子執行緒中完成呢?可以將mythread.cpp中movetothread(this)的//去掉,最後可以顯示:

mythread: 3064174288 

mainwindow: 3064174288 

run: 3019070352 

from mainwindow: 3019070352 

i= 0 

from mainwindow: 3019070352 

i= 1 

from mainwindow: 3019070352 

i= 2 

from mainwindow: 3019070352 

i= 3 

from mainwindow: 3019070352 

i= 4 

from mainwindow: 3019070352 

i= 5 

from mainwindow: 3019070352 

i= 6 

from mainwindow: 3019070352 

i= 7 

from mainwindow: 3019070352 

i= 8 

from mainwindow: 3019070352 

i= 9 

可見子執行緒的槽函式在新執行緒中執行了,沒有出現在主線程中。但這種方法是被bradley t. hughes所唾棄的,所以還是用大家公認為比較對的方法吧。(見下篇)

QT 多執行緒訊號與槽(二)

乙個主線程,乙個次執行緒,主線程向次執行緒傳送訊號 mythread.h include include class mythread public qthread mythread.cpp include mythread.h include mythread mythread void myth...

QT 多執行緒訊號與槽(二)

在 qt 中我們應該要知道幾個問題。物件依附於哪個執行緒 物件的依附性與槽函式執行的關係 物件的依附性是否可以改變,如何改變 預設情況下,物件依附於自身被建立的執行緒。從 中發現,是主線程建立了 threadtest threada 和 myclass my 這兩個物件,那麼這兩個物件就依附於主線程...

qt 多執行緒 訊號槽

qt訊號多執行緒 當你connect的時候,型別為qt autoconnection就好了 如果slot在同一執行緒就是直接呼叫,如果slot在另外乙個執行緒就通過事件機制處理 在qt中,你的執行緒在呼叫exec函式後就進入了事件迴圈機制 這時,如果另外乙個執行緒傳送了乙個訊號過來 1 如果接收執行...