相关文章推荐
有情有义的蚂蚁  ·  swift url ...·  10 月前    · 
大方的羽毛球  ·  博士申请 | ...·  1 年前    · 
销魂的风衣  ·  《Exploring in ...·  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;
				
要精确到毫秒,可以用StopWatch类,或者用GetTickCount API 前者msdn自己查,后者参考http://www.cnblogs.com/jxsoft/archive/2011/10/17/2215366.html windows系统定时器精度默认是15.625ms,所以一般的办法不行。想要到10ms或者更高的精度需要通过api调整系统定时器到1ms精度,然后使用Socket.P...
因为项目需求,有时会用到精度为1ms甚至微妙级的定时器,这对于现在的CPU来说本不是难点。然而Windows并不是一个实时操作系统,它所提供的普通计时方式大多都有较大的误差,并不能完全满足一些特殊场合的应用。下面我用C#测试了几种计时方式,并测量他们的误差。 1、基于 Windows 的标准计时器(System.Windows.Forms.Timer) 2、基于服务器的计时器(System.T
C# Timer 实现Tick 使用精度问题 文章目录C# Timer 实现Tick 使用精度问题实现效果实现误区解决思路代码片段 我们想在C#中实现一秒钟执行n次的一个事件, 然后其他方法可以监听这个事件, 最终实现每一帧随着Tick改变, 我们的倒计时开始计数. 我们最早实现方法是直接开启一个新线程, 在线程内部开启一个Timer, 设定Timer的延迟, 但是最终发现它...
System.Threading.Timer System.Windows.Forms.Timer:仅在.NetFramework中 System.Timers.Timer System.Web.UI.Timer:仅在.Net Framework中 System.Windows.Forms.Timer 定时器,只能...
http://stackoverflow.com/questions/29722838/system-timers-timer-steadily-increasing-the-interval 需要在计时器每次运行后,修正计时器的间隔 通过DateTime的Tick来处理     不过这个修正貌似有点不准 public class Meter privat...
count++; label1.Text = TimeSpan.FromSeconds(count).ToString(); // 将秒数转换为时间格式显示在 label 控件上 在窗体的构造函数中创建一个 Timer 控件,并设置其间隔为 1 秒。在 Tick 事件中,每次计时器触发时增加计数变量 count 的值,然后将其转换为时间格式并显示在 label1 控件上。