Windows驱动程序中的定时器使用与英特尔架构解析
1. 驱动DLL使用定时器
1.1 INT 8h处理器的使用与局限
INT 8h处理器仅应执行真正对时间要求严格的操作,对于其他操作(如更新客户端窗口),可通过调用 PostMessage 并使用用户定义的消息来推迟处理。窗口过程在接收到消息时完成后续处理。
不过,INT 8h处理器方案并不完美。它仅适用于16位DLL,且无法保证每55毫秒被调用一次。实际的硬件定时器中断由虚拟定时器设备(VTD)处理,VTD为虚拟机模拟定时器中断。由于虚拟机接收到的是模拟中断,定时器中断的频率会有所变化。VTD为前台虚拟机(拥有显示和键盘焦点的虚拟机)提供每秒18.2个定时器滴答,即正常速率;而每个后台虚拟机每秒获得的滴答数远少于18.2个,通常约为三到四个。这意味着在Windows下运行的INT 8h处理器,无论是在DOS应用程序还是Win16驱动DLL中,都不能依赖每55毫秒接收一次中断。
1.2 使用timeSetEvent
timeSetEvent 为Windows驱动DLL提供了最精确的周期性通知,它是Windows多媒体函数之一,适用于Win16和Win32代码。在使用 timeSetEvent 之前,代码应按以下步骤操作:
1. 调用 timeGetDevCaps 确定定时器的最小周期。
2. 调用 timeBeginPeriod 设置定时器分辨率。
根据 timeGetDevCa
超级会员免费看
订阅专栏 解锁全文
18

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



