2010-12-22 90 views
5

在Qt中應用程序代碼Class A有一個成員方法,如method1()。我想在另一個成員函數method2()中調用此方法,並在另一個線程中運行mehtod1()。但是我從qt文檔中發現的內容如下。在QT中運行不同線程中的函數

  1. QThread繼承新的class MyThread(假設)。
  2. 用您所需的代碼覆蓋功能方法run()
  3. Class A中創建MyThread的對象,然後在需要的地方調用運行函數。

但上述看起來有點複雜。在Qt中是否有任何機制,以便我可以立即在method1()中創建一個新的QThread(不繼承),並使用此線程運行method2(),然後在執行完成後返回method1()

如果我不清楚我的問題,請讓我知道。

回答

3

您可以使用QObject插槽和信號或事件支持與線程相結合。

基本上,在創建QObject的線程中執行通過信號/槽機制調用的QObject槽。您也可以使用QObject :: moveToThread將對象所有權從一個線程移動到另一個線程。

您也可以使用QCoreApplication ::事件後張貼執行事件的對象是在創建線程。

查看更多有關Qt文檔中的線程和QObject對象(「線程和QObject對象」索引主題)。

就您的問題而言,您可以在不同線程中使用兩個單獨的對象來「傳播」執行。

10

是的,有你喜歡的方式。

本文將幫助你理解它爲什麼不從QThread的繼承正確的方法:http://blog.qt.digia.com/blog/2010/06/17/youre-doing-it-wrong/

本文將幫助你知道如何在一個真正的簡單的方法使用的QThread:http://blog.qt.digia.com/blog/2006/12/04/threading-without-the-headache/

+2

所以等待,基本上在你提供的第一個鏈接中,作者告訴我不要從QThread繼承,而在第二個鏈接中,另一位作者告訴我,如果我繼承QThread,Qt線程是多麼容易。我現在有點困惑,不過謝謝你的鏈接;)+1 – Hafnernuss 2013-02-20 07:47:11

相關問題