pyqt5 重啟相同線程錯誤:QThread: Destroyed while thread is still running


背景:

        把一個基於QObject的類的槽運行在另一個線程,我們可以用moveToThread的方法。

1 新建一個子線程類,編寫槽函數和信號,MyClass *m_MyClass=new MyClass();
2 新建一個線程對象QThread *runThread=new QThread();
3 使用connect連接當前類與子線程的信號槽,以便觸發線程及接收線程執行結果;
4 使用m_MyClass.moveToThread(runThread),將子線程類移到線程中執行;
5 runThread->start(),開啟線程。

  以下子線程名稱統稱為B線程,主線程統稱為A線程;

       B線程是在后台不斷的檢測PC連接的設備,當檢測到合適的設備連接成功后,A線程進行邏輯處理,此時B線程函數內部會直接return,等到A線程處理完連接設備的數據后,會再次新起一個B線程。(這里是因為A線程處理一次數據時間比較長,B線程沒必要一直運行。)

      注:  此處之所以不用互斥量來加鎖,直接讓B線程阻塞是因為擔心死鎖,而且本身程序比較小,耗用內存和CPU什么的都非常小,重啟一個B線程也不會有影響。

 

問題:

      但是B線程函數內部會直接return並不代表線程結束(歸根結底還是自己不了解如何調用),所以直接再次調用runThread.start()會報錯   QThread: Destroyed while thread is still running

 

解決方法:

  再次調用runThread.start()之前添加兩行:

1 runThread.quit()
2 runThread.wait()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM