QT事件循環與QThread類的關閉quit(),wait()


1. 關於為什么關閉線程,釋放資源的時候要先quit(),然后wait()

quit()函數是用來停止QThread的,但是由於Qt本身是事件循環機制,所以在調用完quit()后,QThread可能還沒有完全停止,此時如果執行delete channel,程序就會報錯。在執行quit()后,調用wait()來等待QThread子線程的結束(即從run()函數的返回),這樣就能保證在清除QThread時,其子線程是停止運行的。

2. 事件循環機制

看到上面有一句話,“Qt本身是事件循環機制”,大家可能不理解什么是事件循環機制,大家可以看看這篇文章 https://zhuanlan.zhihu.com/p/72758194
我理解的是,調用quit()之后,將線程停止了,但是如果用戶再次觸發這個線程的啟動,那么會導致你delete 了一個正在運行的線程,因此需要wait()來等待QThread子線程的結束


免責聲明!

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



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