gpt4 book ai didi

c# - Thread.Sleep(timeout) 和 ManualResetEvent.Wait(timeout) 有什么区别?

转载 作者:可可西里 更新时间:2023-11-01 08:14:23 26 4
gpt4 key购买 nike

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 在设计时并未真正考虑到精确性。

只有当超时低于 50 毫秒左右并且您需要可靠性时,您才应该考虑其他计时方法。 This article看起来是一个很好的概述。

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com