C#计时器精度的探究

1.前言

  在与下位机(DSP6748)进行通信的时候,使用System.Timer.Timer进行计时,发现与下位机的时间不一致。实验证明,是使用System.Timer.Timer计时不准造成的。众所周知,System.Windows.Forms.Timer的计时是相对比较不准确的,所以,就System.Timer.Timer和System.Thread.Timer进行测试。
  
2.System.Timer.Timer

1分钟出现1秒的误差。
这里写图片描述
7分钟误差6秒
这里写图片描述
为了测试定时器运行是否被定时器中的任务所影响,在执行方法中使线程休眠10秒,即Thread.sleep(10000),影响了通过执行秒数计算出来的理论时间。可见,elapse方法中的执行,是会影响执行结果的。定时器没有开启一个独立的线程进行计时操作。
究其根源,是因为Windows是分时系统,不是实时系统。它是‘抢占式多任务(Preemptive mutitasking)’的系统。程序是否执行取决于系统调度的粒度,有可能在计时的时候,程序没有被分配到时间片。
代码:

using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值