解决KeSetTimer定时精度不够方法

KeSetTimer定时精度是因为windows系统的时钟分辨率仅为15ms,由于播出软件只是一个应用程序,十分依赖它的运行环境—操作系统。因此不得不提及Windows操作系统的时间片和时钟分辨率。
软件经常使用的API函数GetTickCount () 返回自系统启动以来的ms数,由于系统分辨率的限制,那么返回的只能是15.625ms的整数倍,这就是操作系统的时钟分辨率的概念。操作系统的时钟分辨率直接对操作系统提供的线程相关API有影响,例如在播控软件代码里调用的函数event.Lock(TIMECLIP);其实质是调用了系统API函数WaitForSingleObject();虽然TIMECLIP是6即希望锁定线程6ms但是由于XP的时钟分辨率是15.625ms,所以上述语句实际是锁定线程15.625ms,通过在这条语句前后加测量可证实这一点。
通过使用微软的一个测试工具ClockRes(用来测试操作系统的时钟分辨率的工具)在多核机器上分别测试了WindowXP,Window2003Server,和Windows7,测试结果如下表:
测试结果如下表
这里写图片描述
从上表中可以看出WindowXP和Windows7实际上是可以支持1ms的时钟分辨率,但这必须要开发设备驱动程序,在内核态下调用DDK里的一个函数ULONG ExSetTimerResolution( IN ULONG DesiredTime, IN BOOLEAN SetResolution );来进行修改。应该说操作系统的时钟分辨率对于播出软件的控制精度是影响最直接和最大的,对于WINDOWS自带的NTP校时服务也有很大影响。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值