當前位置:編程學習大全網 - 網站源碼 - qt中通過重寫run方法創建線程與通過movetothread方法有什麽區別

qt中通過重寫run方法創建線程與通過movetothread方法有什麽區別

在Qt中使用多線程,目前就我使用過的有兩種,壹是子類化QThread,重寫run函數,在run函數裏實現自己的代碼,這壹部分代碼通常是比較耗時,或者幹脆直接阻塞的。比如壹個while循環,設置壹個標誌,判斷循環結束。

這樣的例子在網上有很多,就不寫了。

這樣寫的話,會有壹些東西需要了解。

子類化QThread的方法,只有run函數裏面的內容是執行在子線程裏的,其他的部分,比如槽函數什麽的還是在主線程裏執行(假設是在主線程開啟的該子線程)。

還有壹種方法,是子類化QObject,新建壹個線程,然後使用MoveToThread把這個類的對象移到新建的線程中,這種做法使得它所有的槽函數都是執行在新開辟的線程裏面。

如果直接(QObject對象).abc()的話,這個成員函數是在主進程內執行,可能會出現"QObject::killTimer: timers

cannot be stopped from another thread"的運行錯誤。

使用第二種方法的話,貌似會遇到這樣的問題:如果在壹個槽函數中把子線程阻塞,其他的槽函數無法接受來自主線程

額信號。

  • 上一篇:請看下我百度幾時註冊,註冊了多少天。。
  • 下一篇:nodejs 中 module.exports 和 exports 的區別
  • copyright 2024編程學習大全網