Windows的系统时钟间隔
引用注明>> 【作者:张佩】【原文:www.yiiyee.cn/blog】
工具下载:http://www.yiiyee.cn/Blog/clock-interval/
1. 线程调度和时钟间隔
使用ClockInterval工具可以查看/设置系统时钟频率(类似的工具是Sysinternal的ClockRes工具,可以查看当前值)。下图是运行ClockInterval后的界面截图:
如果读者使用这些软件在自己的机器上未测试出类似情况,可能是由于读者所使用的软件版本与笔者当前所使用的不一致,笔者对此不做特殊保证。
2. 用户程序
MMRESULT timeBeginPeriod(UINT uPeriod );
MMRESULT timeEndPeriod(UINT uPeriod );
按文档说明,程序执行期间这两个函数应当成对调用。但据笔者观察,如果退出程序时忘记调用timeEndPeriod函数,系统时钟间隔也会自动恢复的。这两个函数较简单,下面是一段演示代码:
UINT newInverval = 1;
MMRESULT r = timeBeginPeriod( newInverval ); // 设置当前系统时钟间隔为1ms//……if(r == TIMER_NOERROR)
{timeEndPeriod(newInterval);// 最后,再恢复到原频率
}
MMLib仅提供了修改时钟间隔的接口,而未提供获取当前时钟间隔的方法,这需要用到另外的Win32API即:GetSystemTimeAdjustment。其函数声明如下:
BOOL WINAPI GetSystemTimeAdjustment(__out PDWORD lpTimeAdjustment,__out PDWORD lpTimeIncrement,__out PBOOL lpTimeAdjustmentDisabled
);
这个函数没有一个参数是用来输入的,全部是输出参数。其中第二个参数lpTimeIncrement返回的是当前的时钟频率(100ns单位)。下面是一段实例代码,它其实也是ClockResV1.0程序的源码:
void main( int argc, char *argv[] )
{ DWORD adjustment,clockInterval; BOOL adjustmentDisabled; GetSystemTimeAdjustment(&adjustment, &clockInterval, &adjustmentDisabled ); printf( "The systemclock interval is %d ms\n", clockInterval / 10000 );
}
除了上述公开的API接口外,另外有两个未文档的NT接口函数NtQueryTimerResolution和NtSetTimerResolution用来获取和设置时钟频率。在此不做详细分析。
3. 恢复时钟间隔
前文说过应成对地使用timeBeginPeriod和timeEndPeriod函数(除非直接退出程序)。忘记调用timeEndPeriod会产生这样的后果:以后任何程序如果要重新调试系统时钟间隔,只能调低,不能调高。
虽然笔者编写的软件ClockInterval其内部并未使用timeBeginPeriod和timeEndPeriod函数,但上述规则却同样适用。可以用ClockInterval做下面的实验:
- 开启ClockInterval,假设你得到的结果和图1相同,此时将当前时钟间隔设置成10ms,这一定是可以成功的。
- 开启另一个ClockInterval实例,此时将看到当前的时钟间隔是10ms。尝试将当前时钟间隔设置成最大值15.6ms,会发现设置失败。
- 关闭第一个ClockInterval实例后,再次尝试,使用第二步中的ClockInterval实例设置最大的时钟间隔,成功!
一般来说,在打开ClockInterval程序后,界面上显示的当前时钟间隔值是你所能重设的时钟间隔的上限。点击ClockInterval界面的test按钮,会显示关于此的更多信息:
图2 Test测试
图中信息所示:在系统中的其它进程/线程结束其所设置的1ms时钟间隔前,当前进程无法设置更大时钟间隔(>1ms)。
Windows的系统时钟间隔相关推荐
- Windows系统时钟间隔
转载自 http://www.yiiyee.cn/Blog/clock-interval/ [作者:张佩] 系统时钟间隔是个很少被关心到的系统标量,它反映了系统产生时钟中断的频率,间隔越小频率 ...
- 超级任务栏让你轻松玩转Windows 7系统时钟
不知道大家有这样的经历没有,当我们在使用电脑的时候,要想知道现在几点了,第一反应是什么?对,就是看右下角的时钟.但是由于各种原因,比如:长时间不调整啦,或者主板电池电量不足啦.都会导致时间不准,这是件 ...
- 解决黑苹果和Windows双系统时,时钟不同步的问题
解决黑苹果和Windows双系统时,时钟不同步的问题 方法 方法 创建一个reg(注册表)文件,并写入以下内容 Windows Registry Editor Version 5.00[HKEY_LO ...
- 设计一个脉冲发生器,已知系统时钟为50MHz,生成脉冲宽度为1ms,脉冲间隔可调,最大间隔为1s
设计一个脉冲发生器,已知系统时钟为50MHz,生成脉冲宽度为1ms,脉冲间隔可调,最大间隔为1s Design a pulse generator. The system clock is known ...
- Windows XP系统总命令集合
(转)Windows XP系统总命令集合 winver---------检查Windows版本 wmimgmt.msc----打开windows管理体系结构(WMI) wupdmgr--------w ...
- Windows 2003 系统应用故障的分析
Windows 2003 系统应用故障的分析 2009-02-06 背景 2月5日 ...
- [转载]极速狂飚 Windows 2003系统25招加速大法
极速狂飚 Windows 2003系统25招加速大法 现在微软最新的正式版操作系统是Win Server 2003.尽管它是对应服务器的,仍然有不少朋友蠢蠢欲动,升之而后快.可是,安装之后你就会发现麻 ...
- Linux内核系统时钟管理 感想总结 (未完待续)
目前讨论根据的是2.6.x 版本的内核 Linux 内核系统时钟需要了解的泛化的概念 绝对时间: 所谓的绝对时间指的是系统流逝的时间,从你启动系统的那一时刻开始计算,直到你关闭系统的那一刻作为结束,这 ...
- linux本地时间与utc不一致_Linux Windows 双系统时间不一致
大家在装完 Linux 系统后,可能会出现 Linux Windows 两个系统的时间不一致,一般是相差 8 小时.下面就来分析该问题,并给出解决办法. 原因分析 GMT:Greenwich Mean ...
最新文章
- abaqus中元素过度失真是什么意思_Abaqus三维多晶体脚本建模Voronoi多面体建模
- 【MM模块】Procurement for Stock Material 库存型物料采购相关
- ECCV 2012 KCF/DCF:《High-speed tracking with kernelized correlation filters》论文笔记
- bootstrap 利用jquery 添加disabled属性
- 汇编语言——第1次上机实验
- 分数小数互换图_五年级数学分数和小数的互换(15悬赏)
- msgget();msgsnd();msgrcv();msgctl(); 消息队列 Linux进程间的通信方式之消息队列
- Centos7安装Informix
- 爽爆!阿里腾讯都在传的MySQL精华手册,GitHub标星89K
- win10耳机插入电脑里没有声音的新感想
- twitter关注排行榜
- Php 类似coffeescript,有什么东西像CoffeeScript for PHP吗?
- android 夜间模式功能,Android 夜间模式的三种实现
- Vue+element-ui实现表格数据渲染+分页
- Unity 获取手机触摸方法
- python +flask 制作一个实时热搜采集接口 加入百度热搜和微博热搜 并实时滚动代码 嵌入到你的帝国CMS或WP博客 或任意框架网站
- thinkphp6 lib短信宝短信验证码封装
- 【标准全文】GB 38031-2020 电动汽车用动力蓄电池安全要求
- 高考改革后计算机老师,高考改革后 技术教师缺口很大
- 支付宝个人支付接口 系统综合评估不满足签约条件 解决办法
热门文章
- 爆破3389密码:目标主机Win2008(私有IP为192.168.1.167)开放3389端口,使用kali中的Hydra爆破密码。
- 【接口时序】QSPI Flash的原理与QSPI时序的Verilog实现
- 酷狗7、暴风影音5手动去除广告
- 《中华人民共和国反电信网络诈骗法》
- C# -写个可可图片播放器
- 《非金融机构支付服务管理办法》中关于第三方支付的分类
- 美国夏令时与冬令时的区别
- X-Pool:多伦多大学提出基于文本的视频聚合方式,在视频文本检索上达到SOTA性能!(CVPR 2022)...
- Double-checked locking should not be used
- 【Android】Bluetooth(蓝牙)连接与数据传输(一)