QThread::terminate()
文檔聲明不鼓勵通過調用此函數來終止線程。
在我的程序中,我需要在完成執行前終止一個線程。線程正在執行一些繁重的計算,我希望用戶能夠控制停止計算。
我該怎麼做,而不是打電話QThread::terminate()
?如何終止QThread?
1
A
回答
10
從線程外部設置一個標誌,該標誌由線程內的計算檢查,如果標誌已設置,則停止計算。
1
使用標誌是一種明顯而且最常用的方法,但如果您正在使用linux/unix平臺,我建議您使用管道。我遇到了同樣的問題,我使用了一個標誌(這使得代碼不可用,並且由於這種標誌導致的錯誤很難追蹤),然後我改變了實現,以使用管道,這是一種有效的方式來執行必要的操作。
如果你想,對於Linux平臺,我可以告訴你如何使用管道來終止QThread。
您也可能擁有相當於管道的窗口,但我並不瞭解太多,因爲我沒有在Windows平臺上進行大量編程。
希望這有助於
1
最好是使用標誌+互斥,這將使該解決方案線程安全的。
相關問題
- 1. 如何正確刪除並終止QThread
- 2. QThread終止和親和力
- 3. 發送終止後Qthread不停止
- 4. 其父終止確保QProcess中終止的QThread
- 5. QThread :: start:線程終止錯誤
- 6. QThread - 如何阻止工人?
- 7. 如何從GUI停止QThread
- 8. 如何從GUI應用程序正確終止QThread?
- 9. 如何從關閉中停止QThread?
- 10. QThread:如何停止無限循環
- 11. 如何在QT中停止qThread
- 12. 如何防止使用QThread凍結GUI?
- 13. 阻止QThread塊GUI
- 14. 停止QThread執行
- 15. 終止包裝函數的QThread(即不能輪詢「wants_to_end」標誌)
- 16. 如何終止HandlerThreads?
- 17. 如何退出/暫停/終止/終止/停止MSBuild進程?
- 18. Golang:如何從終端終止bufio Scan()?
- 19. 如何終止使用getline()
- 20. Java FX - 如何終止ScheduledService
- 21. 如何終止std :: future?
- 22. 如何終止塊工作
- 23. 如何終止內ITelephony
- 24. 如何終止worflow實例?
- 25. C#如何終止application.run()
- 26. 如何終止performSelectorInBackground:線程?
- 27. 如何終止forEachObject循環?
- 28. Windows如何終止進程?
- 29. 如何終止控制檯?
- 30. 如何終止條件
我在Windows平臺,我不知道管道。 – Donotalo 2009-08-29 11:36:59
@Donotalo, 管道是進程間通信(IPC)的一種形式,正如名稱所暗示的,它用於在線程之間進行通信。我使用管道消除了使用單例模式(或反模式,我應該說:-))出現的某些同步問題。 – rocknroll 2009-09-01 05:11:47
iith一個標誌的問題僅僅是因爲它是一個共享的數據結構,並且必須得到充分的保護(例如'QMutex')。稍微骯髒的方法是濫用'QThread :: setPriority(QThread :: IdlePriority);'並在您的計算循環中檢查'QThread :: priority'。 – MSalters 2011-03-07 16:11:11