.NET 中如何实现高精度定时器

前言

.NET中至少有6种定时器,但精度都不是特别高,一般在15ms~55ms之间。

在一些特殊场景,可能需要高精度的定时器,这就需要我们自己实现了。

本文将讨论高精度定时器实现的思路。

高精度定时器

一个定时器至少需要考虑三部分功能:计时、等待、触发模式。计时是进行时间检查,调整等待的时间;

等待则是用来跳过指定的时间间隔。触发模式是指定时器每次Tick的时间固定还是每次定时任务时间间隔固定。

比如定时器时间间隔10ms,定时任务耗时7ms,是每隔10ms触发一次定时任务,还是等定时任务执行完后等10ms再触发下一个定时任务。

计时

Windows提供了可用于获取高精度时间戳或者测量时间间隔的API。系统原生API是QueryPerformanceCounter (QPC)

在.NET中提供了System.Diagnostics.Stopwatch类获取高精度时间戳,它内部也是通过QueryPerformanceCounter (QPC)进行高精度计时。

QueryPerformanceCounter (QPC)使用硬件计数器作为其基础。硬件计时器由三个部分组成:时钟周期生成器、计数时钟周期的计数器和检索计数器值的方法。

这三个分量的特征决定了QueryPerformanceCounter (QP

你可能感兴趣的:(c#基础,.net,定时器)