Windows下时间精度

Windows下时间精度

Windows为非实时系统,它的Timer通常精度不是很高,下面是常用的Timer设置处理

常用的时间精度

1.       SetTimer/OnTimer

根据MSDN中的定义,可以知道,最下值是参考宏USER_TIMER_MINIMUM.

If uElapse is less than USER_TIMER_MINIMUM, the timeout is set to USER_TIMER_MINIMUM.

If uElapse is greater than USER_TIMER_MAXIMUM, the timeout is set to USER_TIMER_MAXIMUM.

Windows 9855毫秒,Windows NT中,定时器的分辨率为10毫秒。

#define USER_TIMER_MAXIMUM  0x7FFFFFFF
#define USER_TIMER_MINIMUM  0x0000000A

 

 

2.       Sleep(0)/Sleep(1)

Sleep(n)的作用是让当前线程睡眠n毫秒,以便执行其他线程,如果没有其他线程,那睡眠n毫秒后,继续执行。

根据MSDN中的定义设置为0时,检查一下是否busy,不忙时立即返回处理

A value of zero causes the thread to relinquish the remainder of its time slice to any other thread of equal priority that is ready to run. If no other threads of equal priority are ready to run, the function returns immediately, and the thread continues execution.

http://blog.sina.com.cn/s/blog_605f5b4f0100zcqx.html换上了双核cpu,问题出来了:Sleep(0)经常会比预期中更早返回。)

 

3.       timeSetEvent-timeBeginPeriod-timeEndPeriod

调用之后用timeSetTime()注册一个回调函数,即一个中断处理过程。

Windows驱动程序最精确的周期性通知是由Windows的多媒体服务timeSetEvent()提供的。它的时间可以精确到1毫秒。

多媒体播放/录制控制时,可以采用这个作为精度,相对比较可靠。

 

 

4.       QueryPerformanceFrequency() QueryPerformanceCounter()函数

理论上可以达到更高的精度

QueryPerformanceFrequency返回硬件支持的高精度计数器的频率。

QueryPerformanceCounter用于得到高精度计时器的值(如果存在这样的计时器)

 

Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu  转载请标明来源 

 

你可能感兴趣的:(sleep,settimer,时间精度,timsetevent)