天天看點

一種使用QThread線程的新方法 moveToThread

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

王:https://blog.csdn.net/sydnash/article/details/7425947

劉:http://www.cnblogs.com/wangshaowei/p/8384474.html

    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的事件循環會自己自動處理好這個。

一種使用QThread線程的新方法 moveToThread

版權所有 禁止侵權