我正在使用ManualResetEvent WaitOne(timeout)方法并将超时值设置为30ms。
我使用WaitOne两侧的log4net进行日志记录。日志消息显示WaitOne仅在等待22ms后返回false。什么会导致这个?一个.Net bug?
提前致谢。
答案 0 :(得分:3)
从.NET方法最终使用的等待函数的Win32文档(http://msdn.microsoft.com/en-us/library/ms687069.aspx):
等待功能和超时间隔
指定超时的准确性 间隔取决于分辨率 系统时钟。系统时钟 以固定的速度“嘀嗒”。如果 超时间隔小于 解析系统时钟, 等待可能会超过时间 指定的时间长度。如果 超时间隔大于1 嘀嗒但不到两个,等待即可 在一到两个刻度之间, 等等。
答案 1 :(得分:1)
事件早期发出信号,或者您有定时器不准确性,因为系统时钟默认精确到15.625毫秒。
答案 2 :(得分:0)
一般来说,不要过分依赖超时。它们大致正确,不一定完美。出于同样的原因,您不应该依赖于Thread.Sleep()之类的调用来进行计时,操作系统不能确保这些调用完全正确。
答案 3 :(得分:0)
在.NET内部,来自.NET的WaitOne方法调用Windows WaitOne方法。这不是一个错误,而是正常的Windows行为。