32、Windows驱动程序中的定时器使用与英特尔架构解析

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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值