Thread.Sleep(timeout)和resetEvent.Wait(timeout)都会导致执行暂停至少timeout
毫秒,因此它们之间有区别吗?我知道Thread.Sleep会使线程放弃剩余的时间片,因此可能导致 sleep 时间长于所要求的时间。 ManualResetEvent对象的Wait(timeout)方法是否存在相同的问题?
编辑:我知道从另一个线程发出ManualResetEvent的要点-现在,我只关心事件的Wait方法的情况,该方法指定了超时,没有其他调用者设置该事件。我想知道按时唤醒是否比Thread.Sleep更可靠
最佳答案
Thread.Sleep(timeout)
导致无条件等待,然后恢复执行。 resetEvent.WaitOne(timeout)
使线程等待,直到(1)事件被触发,或(2)超时。
使用事件的目的是从另一个线程触发事件,因此您可以直接控制线程何时醒来。如果不需要此功能,则不应使用事件对象。
编辑:就时间而言,它们都同样可靠。但是,您对“准时唤醒”的评论令我感到担忧。为什么需要您的代码按时唤醒? Sleep
和WaitOne
在设计时并没有考虑到精确度。
仅当timeout
低于50ms左右并且需要可靠性时,才应考虑其他计时方法。 This article看起来很不错。
关于c# - Thread.Sleep(timeout)和ManualResetEvent.Wait(timeout)有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2999093/