在日常的开发过程中,经常 会使用一些定时器做定时循环处理任务;
C# 中的定时器 包括 WinForm 中的System.Windows.Forms.Timer ;System.Timers.Timer ;System.Threading.Timer;
以上方法在实际运行中,在执行一段时间后都会或多或少出现时间精度丢失的情况。
经过测试:System.Windows.Forms.Timer 每各1秒钟要丢失15毫秒左右;
System.Timers.Timer timer = new System.Timers.Timer();
timer.Elapsed += timer_Elapsed;
timer.Interval = 1000;
timer.AutoReset = true;
timer.Enabled = true;

System.Threading.Timer 每各1秒钟要丢失12~24毫秒左右;
System.Threading.Timer timer2;
TimerCallback timerDelegate = new TimerCallback(timer2_Elapsed);
//创建一个时间间隔为1s的定时器
timer2 = new System.Threading.Timer(timerDelegate, null, 1000, 1000);

这样子的情况

日常开发常使用定时器做定时循环任务,C#中的System.Windows.Forms.Timer、System.Timers.Timer、System.Threading.Timer在运行一段时间后会出现时间精度丢失问题,导致任务执行次数减少。为此找到利用Kernel32.dll的QueryPerformanceCounter封装的计时器,可保证毫秒级精度。
最低0.47元/天 解锁文章
597

被折叠的 条评论
为什么被折叠?



