2011-07-26 31 views
0

假設我想要一個工作線程,該工作線程具有從主應用程序線程中獲取信號的插槽。Qt:在主線程上具有插槽和發射器的工作線程

  1. 該工作線程的「:: run()」方法將如何查找?顯然我需要某種循環或線程將立即終止。我希望它能堅持下去,以便它能處理傳入的插槽。那個循環會是怎樣的?相當於睡眠和泵信息的東西?泵怎麼樣?

  2. 我是否需要「MoveToThread()」將傳遞到線程的插槽的所有對象,以便插槽的處理在工作線程的上下文中完成?

謝謝。

+0

請參閱:http://stackoverflow.com/questions/3911086/qthread-threaded-rly/3911440#3911440 –

回答

1

做了一些更多的挖掘。 QThread :: run的默認實現調用消息循環的「exec」。所以不需要額外的工作。在我的QThread的構造我補充一點:

this->start(); 
QObject::moveToThread(this); 

其結果是,我的線程開始建設時,線程瞄準線插槽之外的所有信號都在我的線程的上下文中執行。

+1

不! :)這是使用QThreads的誤導和重複的方式。簡短的回答(與QThread文檔相反)。不要繼承QThread。子類QObject做你想做的工作,並使用moveToThread()將它移動到QThread的一個實例。 –

+1

有趣的方法。它有什麼好處?另外,使用上述方法是否有潛在的災難? – JasonGenX

+0

當我嘗試將子線程QThread並將其移至構造函數中的自己線程的方法時,我有很大的困難正確地進行清理。特別是,你不能調用deleteLater()。在引入信號和插槽時執行的命令還存在其他問題。這是一個完整的混亂,即使它似乎經常正常工作。 –