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

本文探讨了C#中几种常见定时器(Windows.Forms.Timer, System.Timers.Timer, System.Threading.Timer, DispatcherTimer)的精度,并通过实际测试揭示它们在Windows非实时操作系统下的误差。特别地,注意到DispatcherTimer的精度仅达到100ms,而通过调用Kernel32.dll进行内核计时寄存器查询可以实现更高精度。" 106954517,204453,Visual Basic 2010 实现酒店入住管理系统,"['Visual Basic开发', '数据库应用', '酒店管理系统', '用户界面设计', '软件工程']
摘要由CSDN通过智能技术生成

因为项目需求,有时会用到精度为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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值