Windows基础知识
+ -

Windows内核提高KeSetTimer、KeWaitForSignelObject定时精度方法

2022-08-26 131 0

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,测试结果如下表:

C:\Users\Administrator>C:\Users\ADMINI~1\AppData\Local\Temp\Rar$DRa0.170\Clockres64.exe

Clockres v2.1 - Clock resolution display utility
Copyright (C) 2016 Mark Russinovich
Sysinternals

Maximum timer interval: 15.625 ms
Minimum timer interval: 0.500 ms
Current timer interval: 1.003 ms

0 篇笔记 写笔记

Windows内核提高KeSetTimerKeWaitForSignelObject定时精度方法
KeSetTimer定时精度是因为windows系统的时钟分辨率仅为15ms,由于播放软件只是一个应用程序,十分依赖它的运行环境—操作系统。因此不得不提及Windows操作系统的时间片和时钟分辨率。软件经常使用的API函数GetTickCount () 返回自系统启动以来的ms数,由于系统分辨率的限......
作者信息
我爱内核
Windows驱动开发,网站开发
好好学习,天天向上。
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!