0

我想使用 3 或 4 个C# 定时器,间隔可能为 40 毫秒(处理图像数据 1000/25 = 40)。

根据 MSDN,它似乎是每 40 毫秒执行一次任务的好模式。默认间隔为 100 毫秒。

在现实生活中,我想知道 40ms 是否还可以?或者如果我应该使用另一种线程设计模式?唤醒/睡眠行为是否接近 CPU 空闲?

4

1 回答 1

1

100 毫秒默认值没有特别的相关性,您可以根据需要更改它。

如果您想获得从一台机器到另一台机器一致的间隔,您确实需要仔细选择您的值。Timer 类的精度受默认操作系统时钟中断率的影响。在大多数 Windows 机器上,该中断每秒发生 64 次。等于 15.625 毫秒。有些机器的速度更高,有些机器的速度低至 1 毫秒。其他程序改变中断率的副作用。timeBeginPeriod() winapi 函数执行此操作,它具有全局效果。

因此,最好的间隔是 15.625 的倍数并保持在该值之下。因此,您选择的间隔在任何机器上都能很好地重复。这做出了很好的选择:

  • 15
  • 31
  • 46
  • 62
  • 等等

因此,在 40 毫秒附近瞄准的最佳选择是 46。它在任何机器上都将精确到 1.4%。我自己总是选择 45,不错的整数。

请注意,如果机器负载很重,或者程序中有很多活动的线程池线程,实际间隔可能会更长。

于 2013-08-07T23:53:46.063 回答