直接進入主題:
基本用法,新建乙個widget類(父類無要求) ,在此基礎上新建乙個testthread(必須繼承自 qobject),
在widget類建構函式裡做如下處理:
m_testthread = new testthread();
m_thread = new qthread();
m_testthread ->movetothread(m_thread);
m_thread->start();//以上是必須滴
connect(this,signal(startthread()),m_testthread ,slot(threadstart()));
emit startthread(); //傳送訊號,執行槽函式threadstart()
int i= 0;
while(1)
結論一:
可以發現,主線程並沒有因為threadstart()的死迴圈而被阻塞,兩段**是執行在不同的執行緒中。
結論二:
如果將上述emit startthread(); 改為 m_mainthread->threadstart();
即直接呼叫函式的方式,而非槽函式。結果如下:
可以看出:通過呼叫函式的方式時,主線程被阻塞,也就是說,呼叫的函式沒有執行在另乙個執行緒中,而是在主線程。
說明:
1. 執行緒函式的 while迴圈結束 並不代表 執行緒結束
2.m_thread->isrunning() 可以判斷 執行緒是否在執行
3.m_thread->isfinished() 可以判斷 執行緒 是否結束
4.started() 執行緒被start時觸發的訊號
5.finished() 執行緒被stop時觸發的訊號
6.執行緒退出的方法
m_thread->quit();
m_thread->exit();
兩者異同暫不討論
7.等待執行緒結束,即阻塞
m_thread->wait()
三十九 Qt 多執行緒使用moveToThread
1.從qobject派生乙個類,將耗時的工作寫在該類的槽函式中。2.將派生類物件移動到乙個qthread中,該執行緒需要start。這一步使用movetothread 3.通過訊號連線派生類的槽函式,並通過訊號觸發槽函式。槽函式在子執行緒中執行 ifndef worker h define work...
Qt 多執行緒之 std thread 一
不時見到有人會這樣做 那麼,如何使用pthread,而又使用qt提供的執行緒間機制呢?本文的初衷源於此,但是使用的的是c 0x 的 std thread,而不是直接使用unix的pthread。既然用qt,還是盡量保證誇平台吧 不想寫太多的文字,還是用乙個乙個的小例子來說話吧。int main in...
Qt多執行緒之死鎖
目錄 一 造成死鎖的原因 現象分析 二 死鎖的概念和發生條件 三 死鎖的避免 四 避免死鎖的示例 一般性原則,每個臨界資源都需要乙個執行緒鎖來進行保護,假設有多個執行緒鎖該怎麼設計程式呢?先來看以下的乙個示例 很簡單就不加注釋了 qmutex g mutex 1 qmutex g mutex 2 c...