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)超时。

使用事件的目的是从另一个线程触发事件,因此您可以直接控制线程何时醒来。如果不需要此功能,则不应使用事件对象。

编辑:就时间而言,它们都同样可靠。但是,您对“准时唤醒”的评论令我感到担忧。为什么需要您的代码按时唤醒? SleepWaitOne在设计时并没有考虑到精确度。

仅当timeout低于50ms左右并且需要可靠性时,才应考虑其他计时方法。 This article看起来很不错。

关于c# - Thread.Sleep(timeout)和ManualResetEvent.Wait(timeout)有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2999093/

10-13 05:53