我有一個QThread
聽服務器。我想立即暫停QThread
的工作。根本沒有等待,但幾乎像是終止,它必須是立竿見影的。Qt,如何暫停QThread
1
A
回答
11
在任何給定線程中運行的代碼不能在任何點停止,而不會破壞代碼和/或C/C++運行時或任何其他使用的庫中的共享數據結構的狀態。
該代碼只能停在明確定義的點上。
如果你的線程中運行一個事件循環(即通常,如果你不從QThread
得到或沒有覆蓋其run
),然後將QThread::quit()
一旦控制權返回給事件循環,它是安全的停止線程這樣做。
如果你的線程運行重新實現有執行一個循環,它應該被要求中斷時返回:
void MyThread::run() {
while (! isInterruptionRequested()) {
...
}
}
這樣的線程是QThread::requestInterruption()
停止的。
僅供參考,這裏是有時迷茫的QThread
各種方法:
wait()
塊調用線程,直到被調用線程結束。當然,從線程本身調用它會立即造成死鎖:如果一個線程等待一些永遠不會發生的事情,線程就無法完成。quit()
儘早退出線程的事件循環,並導致返回QThread::run()
。如果你重新實現了run()
並且不旋轉事件循環,它什麼也不做。requestTermination()
設置一個標誌,表示YourThread::run()
中的自定義循環可以通過isTerminationRequested()
進行檢查。terminate()
停止線程現在。這通常會破壞您的應用程序的狀態,因此您必須很快或不久就要面臨後果。這種方法最好被遺忘。這實際上意味着「如果你有機會,很快就會崩潰這個過程並損壞一些磁盤數據」。
相關問題
- 1. 如何在QT中停止qThread
- 2. Qt - 如何殺死QThread
- 3. 如何取消暫停線程的Qt
- 4. 如何暫停和恢復Qtimer(Qt 5)
- 5. 如何在QPushButton按下時暫停執行QThread?
- 6. 如何從GUI停止QThread
- 7. Qt應用程序暫停
- 8. Qt播放/暫停動作?
- 9. C++/Qt - QThread vs QRunnable
- 10. 如何暫停DispatchTimer?
- 11. 如何暫停CADisplayLink?
- 12. IProgressMonitor如何暫停?
- 13. 如何暫停DynamicAnimator
- 14. Liquidsoap,如何暫停?
- 15. 如何從關閉中停止QThread?
- 16. QThread:如何停止無限循環
- 17. 從QThread類監視Qt GUI
- 18. 停止QThread執行
- 19. 如何暫停和重新啓動QT Qtimer
- 20. 如何停止visual studio去program.cs(暫停所有)暫停按鈕
- 21. 暫停循環並暫停
- 22. 如何暫停與執行
- 23. 如何暫停git分支?
- 24. 如何讓屏幕暫停?
- 25. 如何暫停在IOS
- 26. 如何暫停此球?
- 27. 如何暫停Java Swing Timer?
- 28. 如何暫停網頁?
- 29. 如何暫停PerformSelector執行?
- 30. 如何暫停故事板?
你能提供一些代碼嗎?現在還不清楚你的意思。如你所見,msleep方法立即暫停線程的工作。這是你想要的嗎? –
_「它必須像刀一樣切割」_O_o –
QThread的運行功能發出信號。我想終止由信號發出的東西alrealdy作品。 –