系统之间奇怪的"睡眠"行为

Its*_*sik 7 c++ winapi timing

我有一个程序使用SleepWin32 API调用使一个线程等待一段特定的时间.
简而言之,它通过发送预存在内存中的图像来模拟相机.我Sleep用来模拟帧速率 -Sleep(1000 / fps)

这在我的开发系统(Intel i5(第1代),Win7 64)中运行良好,但是当我在另一个系统(Intel i7-2600 - SandyBridge)上运行它时,睡眠时间完全不同且不准确.

例如, Sleep(16)睡觉时32ms
Sleep(3)睡觉16ms

在过去,我认为在Windows中有最小的睡眠时间,15ms但我没有在我的开发系统上得到这个限制.

有任何想法吗?

另外,有没有更好的方法来实现我的模拟器的帧速率?

Håv*_*d S 7

sleep功能可确保您至少睡眠至呼叫中指定的数量.它导致线程挂起,允许在调度程序的空闲时切换到其他线程(由线程优先级控制).换句话说,睡眠线程不能保证在指定时间过后立即运行,因此sleep在一般情况下应避免使用准确的定时.

但是,有一些方法可以在Windows上实现更准确的睡眠.您可以调用timeGetDevCaps以确定最小支持的计时器分辨率,然后timeBeginPeriod在应用程序中提前调用一次,以将计时器分辨率设置为最小值.请务必timeEndPeriod在退出应用程序之前致电.

有关更多信息,请参阅MSDN上Sleep功能.