C#项目中如何用Multimedia Timer实现1ms精度的30ms周期执行?
关于Windows高精度定时器的问题解答
1. Multimedia Timer是否能实现1ms精度?
可以。Multimedia Timer(基于timeSetEvent等Windows系统API)是原生提供的高精度定时器机制,理论最小精度可达1ms,远优于普通定时器受限于系统15ms时钟粒度的精度表现。实际运行中,精度可能受系统CPU负载、高优先级线程影响出现微小偏差,但对于30ms的周期性任务来说,完全能满足你的精度需求,且无需修改系统时钟设置。Windows Server 2019原生支持这套API,无需额外安装组件。
2. 适配Windows Server 2019的简单使用示例
下面是封装好的极简示例,你可以直接替换原有System.Timers.Timer逻辑,把你的Periodic_function()嵌入即可:
第一步:封装高精度定时器类
using System; using System.Runtime.InteropServices; public class HighPrecisionTimer { // 底层API委托与函数声明 private delegate void TimerCallback(uint uTimerID, uint uMsg, IntPtr dwUser, IntPtr dw1, IntPtr dw2); [DllImport("winmm.dll", SetLastError = true)] private static extern uint timeSetEvent(uint uDelay, uint uResolution, TimerCallback lpTimeProc, IntPtr dwUser, uint fuEvent); [DllImport("winmm.dll", SetLastError = true)] private static extern uint timeKillEvent(uint uTimerID); private uint _timerId; private readonly TimerCallback _internalCallback; // 构造函数传入你的周期性执行函数 public HighPrecisionTimer(Action periodicAction) { _internalCallback = (_, __, ___, ____, _____) => periodicAction.Invoke(); } // 启动定时器,参数为周期(毫秒) public void Start(int intervalMs) { // uResolution设为1ms,要求系统尽可能保证精度 _timerId = timeSetEvent((uint)intervalMs, 1, _internalCallback, IntPtr.Zero, 0x0001); // 0x0001代表周期性触发 if (_timerId == 0) { throw new System.ComponentModel.Win32Exception(Marshal.GetLastWin32Error()); } } // 停止并释放定时器资源 public void Stop() { if (_timerId != 0) { timeKillEvent(_timerId); _timerId = 0; } } }
第二步:替换原有定时器逻辑
private HighPrecisionTimer _periodicTimer; public void InitializeTimer_Periodic_timer() { // 传入你的Periodic_function作为定时执行逻辑 _periodicTimer = new HighPrecisionTimer(Periodic_function); // 设置周期为30ms _periodicTimer.Start(30); } // 你的原有周期性函数,无需修改 private void Periodic_function() { // 这里保留你的业务逻辑代码 } // 注意:在程序退出、资源释放时调用Stop(),避免内存泄漏 // 例如在窗体关闭、服务停止事件中: // _periodicTimer?.Stop();
使用说明
- 这个封装类已经处理了底层API的调用细节,使用方式和你原来的
System.Timers.Timer几乎一致。 - Windows Server 2019自带
winmm.dll,无需额外配置。
内容的提问来源于stack exchange,提问作者Dargento
相关产品推荐
相关产品推荐

