我需要停止線程,但是如果它應該睡眠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. 如何在睡眠時結束線程?
- 2. Andengine睡眠線程?
- 3. Openmp線程睡眠
- 4. 線程中睡眠問題
- 5. 睡眠時線程中斷
- 6. 中斷睡眠線程
- 7. 睡眠內線程沒有睡眠外線程 - Java
- 8. C# - 如何喚醒睡眠線程?
- 9. 如何發送當前線程睡眠
- 10. 如何喚醒睡眠(3)ing線程
- 11. 線程在Tomcat中的睡眠
- 12. 使所有線程睡眠
- 13. Scala:喚醒睡眠線程
- 14. c#睡眠線程問題
- 15. 喚醒睡眠線程
- 16. 隨機化線程睡眠
- 17. onReceive最大線程睡眠
- 18. 的Android/Java線程睡眠
- 19. linux線程,主要睡眠
- 20. Java中的睡眠線程或進程
- 21. 多線程HttpListern恢復睡眠線程
- 22. 如何在pthread中終止睡眠線程?
- 23. 如何在Java中發出睡眠線程信號?
- 24. 如何使在C#中的獨立線程睡眠
- 25. 如何在Android中喚醒一個線程睡眠
- 26. 確定線程是否正在睡眠
- 27. 紅寶石睡眠在線程
- 28. Perl的線程中斷睡眠不行
- 29. 中斷或停止睡眠線程
- 30. Clojure去塊中的線程/睡眠
不要緊,無論是在或睡眠後終止? – 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