TimeSetEvent替代Timer控件实现高精度定时器
VB 里的 Timer 控件用起来是方便,但一到需要高精度定时的地方就有点掉链子了。比如你想做个毫秒级响应的程序,或者搞点实时数据的活,Timer控件那种“差不多就行”的风格就不太够看了。这时候,TimeSetEvent就派上用场了,用它替代 Timer,精度一下子就上来了,响应也快,回调也灵活,蛮适合高性能场景的。
TimeSetEvent是 WinMM(Windows 多媒体 API)的一个函数,可以设定一个定时器,在时间到了的时候自动执行一个回调函数。比起 Timer 控件那种靠系统消息循环的方式,这种做法更直接,也更可靠,尤其在你想搞点音视频、游戏帧率控制这种对时间挑剔的地方。
调用方式也不算复杂,大致写法是这样的:
Declare Function TimeSetEvent Lib "winmm.dll" (ByVal uDelay As Long, ByVal uResolution As Long, ByVal lpfnTimerProc As Long, ByVal dwUser As Long, ByVal wTimerMode As Long) As Long
几个参数别怕,看起来多其实蛮:uDelay
是你要设定的间隔,lpfnTimerProc
是你写的回调函数地址,wTimerMode
设成 1 就是周期性触发,设成 0 就只触发一次。记得配套用TimeKillEvent
来取消,不然你会发现程序关了 CPU 还在转。
不过也有坑,像频繁创建/销毁定时器就会拉高 CPU 使用率,太密集的触发也容易冲爆你的回调。建议还是合理安排节奏,别啥都往里堆。
如果你对回调函数不熟,可以参考这篇文章:TimesetEvent 与 QueryPerformanceFrequency 定时器对比,里面有详细的比较和使用。
,TimeSetEvent是个比Timer 控件更狠的定时利器。如果你在做高精度 VB 应用,不妨换上它试试。
7.6KB
文件大小:
评论区