因为项目需求,有时会用到精度为1ms甚至微妙级的定时器,这对于现在的CPU来说本不是难点。然而Windows并不是一个实时操作系统,它所提供的普通计时方式大多都有较大的误差,并不能完全满足一些特殊场合的应用。下面我用C#测试了几种计时方式,并测量他们的误差。
1、基于 Windows 的标准计时器(System.Windows.Forms.Timer)
2、基于服务器的计时器(System.Timers.Timer)
3、线程计时器(System.Threading.Timer)
4、基于WPF的的计时器(System.Windows.Threading)
涉及到UI的操作要使用这个,否则会提示界面资源被其他线程所拥有而无法更新界面,但是精度只有100ms。
DispatcherTimer PIT0 = new DispatcherTimer();
PIT0.Interval = new TimeSpan(0, 0, 0, 0, 100);
PIT0.Tick += new EventHandler(PIT0_ISR);
PIT0.Start();
public void PIT0_ISR(object sender, EventArgs e) {
}
5、基于内核计时寄存器的定时器
[System.Runtime.InteropServices.DllImport("Kernel32.dll")]
static extern bool QueryPerfor