乙個主線程,乙個次執行緒,主線程向次執行緒傳送訊號
mythread.h
#include
#include
classmythread
:public
qthread
;mythread.cpp
#include"mythread.h"
#include
mythread::mythread()
voidmythread::run()
voidmythread::receive_main_signal(int
a)
classmainwindow
:public
qmainwindow
;
mainwindow.cpp
#include"mainwindow.h"
#include"ui_mainwindow.h"
#include
mainwindow::mainwindow(qwidget*parent):
qmainwindow(parent),
ui(new
ui::mainwindow)
mainwindow::~mainwindow()
voidmainwindow::start_thread()
}
列印結果:
mythread: 3063412432mainwindow: 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 如果接收執行...