我需要停止線程,但是如果它應該睡眠8秒,並且我想放棄它,它會繼續睡眠8秒,然後停止。如何在睡眠中放棄線程
3
A
回答
6
你不能(安全地)在睡着時中止線程。您應該在阻止完成後立即檢查您的中止條件,然後在該點退出。
無論如何,在大多數情況下,這確實沒有什麼缺點,因爲線程在阻塞時將使用很少的資源。
如果您必須儘快「中止」,您可以使用不同的機制進行阻止。睡覺很少是正確的選擇 - 等待句柄可能會提供相同的功能,併爲其他線程發出信號指示它應該立即停止阻塞。
2
使用的AutoResetEvent timed Wait代替Sleep
,信號使用Set當你想中斷等待線程的AutoResetEvent,否則定時器超時。
12
ManualResetEvent mre=new ManualResetEvent(false);
//......
var signalled=mre.WaitOne(TimeSpan.FromSeconds(8));
if(!signalled)
{
//timeout occurred
}
別處(前8秒上升):
mre.Set(); //unfreezes paused Thread and causes signalled==true
並允許暢通線程正常終止。 Thread.Abort
是evil and should be avoided。
+0
+1睡眠是很少需要的。 – 2011-04-26 17:02:42
5
考慮使用System.Timers.Timer
類。這是一個計時器,如果需要可以停止。
你可以找到一些很好的說明here
相關問題
- 1. 即使使用睡眠也不放棄CPU時間的線程
- 2. 如何在睡眠時結束線程?
- 3. 線程和睡眠()
- 4. WCF線程睡眠
- 5. Java線程睡眠
- 6. Andengine睡眠線程?
- 7. Openmp線程睡眠
- 8. 中斷睡眠線程
- 9. 睡眠時線程中斷
- 10. 單線程中斷睡眠
- 11. 線程中睡眠問題
- 12. 睡眠內線程沒有睡眠外線程 - Java
- 13. 在C中中止睡眠線程#
- 14. Android,如何讓線程睡眠?
- 15. 如何喚醒睡眠(3)ing線程
- 16. 如何標準::線程睡眠
- 17. C# - 如何喚醒睡眠線程?
- 18. 如何放棄Android線程?
- 19. 線程在Tomcat中的睡眠
- 20. 隨機化線程睡眠
- 21. 線程睡眠連接
- 22. 睡眠後繼續線程
- 23. 喚醒睡眠線程
- 24. C++睡眠線程衝突
- 25. c#睡眠線程問題
- 26. linux線程,主要睡眠
- 27. Scala:喚醒睡眠線程
- 28. 的Android/Java線程睡眠
- 29. 使所有線程睡眠
- 30. onReceive最大線程睡眠
不要緊,無論是在或睡眠後終止? – 2011-04-26 16:14:59
你有沒有考慮過喚醒它?即。使用一些會迫使它離開睡眠的東西? – 2011-04-26 16:15:25
這是一個*真的*壞主意放棄線程。請參閱http://stackoverflow.com/questions/1559255/whats-wrong-with-using-thread-abort – 2011-04-26 17:04:01