qt線程退出的一些研究

感覺qt的線程有點坑,好吧,還是自己不太熟悉,今天抽空研究了一下,記錄下來。

我經常使用的是兩種線程:

1.繼承QThread, 重寫run()函數。

2.使用movethread()函數。

對於第一種,大家應該都比較熟悉,我的做法是在run函數中,通過設置bool值來控制線程的循環當run()函數退出的時候,會發出finished()信號,通過看qt文檔,建議是當信號發出的時候,連接到deleteLater()函數,connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater())),這樣就可以刪除線程了。

wait()函數相當於阻塞函數,目的是爲了防止主線程在次線程之前退出。

quit()函數,是槽函數。自己使用mvoetothread()函數的時候,使用到了它。當自己定義的類(比如worker)要退出的時候,發出信號,連接到線程thread的quit()槽函數。當發出信號的時候, 會調用quit()函數使線程退出。當線程退出後,會發生信號finished()。後面的步驟和上面的一樣了。

其實,使用倒是不難,關鍵如何正確的退出線程,這裏自己老是出錯。今天好好研究一下。對了,還有一點,就是用movetothread()函數的時候,連接對應的worker類的槽函數,確實是在次線程中,可是當自己連接worker類中的兩個槽函數時,我原以爲是在兩個不同的線程中,經過測試,其實是在同一個線程中,線程id是相同的。

發佈了89 篇原創文章 · 獲贊 84 · 訪問量 33萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章