关于C#中几种定时器精度的测试与探究

因为项目需求,有时会用到精度为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 QueryPerformanceFrequency(ref long count);
        [System.Runtime.InteropServices.DllImport("Kernel32.dll")]
        static extern bool QueryPerformanceCounter(ref long count);

        QueryPerformanceFrequency(ref freq);
        QueryPerformanceCounter(ref count1);

        QueryPerformanceCounter(ref count2);
        result = ((double)(count2 - count1) / (double)freq) * 10000;//单位1 microsecond

        

展开阅读全文

没有更多推荐了,返回首页