【发布时间】:2015-05-14 10:23:54
【问题描述】:
目前我有一个计时器,我假设它每 5 毫秒调用一次在 TimerCallback 字段中定义的方法,但是在阅读了 Timer 类及其分辨率后,我发现 Timer 类只有 15 毫秒的分辨率或更高。
例如
autoDispatchTimer = new Timer(new TimerCallback(this.SendData), null, 0, 5);
我也考虑过使用Stopwatch,因为这确实可以实现更高的分辨率,但我仍然不确定如何使用Stopwatch 来执行相同的操作。无论如何,这可以使用Stopwatch 对象来完成吗?
会不会是读取ElapsedMilliseconds 属性并在那里调用SendData 方法的情况,还是我误解了C# 中Stopwatch 的工作原理?
非常感谢您对此查询的帮助。
编辑:我完全理解计时器的精度为 15 毫秒,因此我剩下的问题是询问更快的替代方案。现已修改标题以反映这一点。
【问题讨论】:
-
你不能有这个,因为系统时间精度是 15ms
-
我建议你看看线程
-
从技术上讲,您可以使用
NtSetTimerResolution来加快 Windows 中的线程调度,但我建议您不要这样做。仍然没有保证。 -
15ms的时间精度是Windows 7:msdn.microsoft.com/en-us/library/….
-
即使你有这个,它也不太可能有用。你打算每 5 毫秒(即每秒 200 次)开始什么工作,这与每 15 毫秒做三件事明显不同? SendData 意味着通过网络发送数据。仅网络抖动就会打乱那些超精确的时序。