我需要停止线程,但是如果它应该睡眠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