1. 程式人生 > >一種使用QThread執行緒的新方法 moveToThread

一種使用QThread執行緒的新方法 moveToThread

工作中使用QT開發遇到使用多執行緒,對於執行緒的建立,研究後發現有些疑惑。各執一詞先上兩個連結:

    QThread似乎是很難的一個東西,特別是訊號和槽,有非常多的人(儘管使用者本人往往不知道)在用不恰當(甚至錯誤)的方式在使用QThread,隨便用google一搜,就能搜出大量結果出來。無怪乎Qt的開發人員 Bradley T. Hughes聲嘶力竭地喊you are-doing-it-wrong。

  通過測試,在mainwidow.cxx使用上面的程式碼的時候,由於my呼叫了movetothread函式,那麼它所有的槽函式都是執行在新開闢的執行緒裡面。    如果去掉moveToThread函式,那麼所有的函式都將執行在gui執行緒裡面。

   同時為了測試connect的第五個引數,在connect的時候可以將Qt::QueuedConnection修改為Qt::DirectConnection,這樣所有的槽函式也將在主執行緒裡面執行。

最終,使用move toThread這種真正的多執行緒。

推薦的方法

千呼萬喚始出來。

其實,這個方法太簡單,太好用了。定義一個普通的QObject派生類,然後將其物件move到QThread中。使用訊號和槽時根本不用考慮多執行緒的存在。也不用使用QMutex來進行同步,Qt的事件迴圈會自己自動處理好這個。

版權所有 禁止侵權