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;