Answers:
不,这不对。睡眠仅保证了最短的睡眠时间,但实际上可能会在该时间上任意任意时间睡眠。计时器分辨率(通过timeBeginPeriod设置)对此也很重要,即使您使用其他计时器(例如QueryPerformanceCounter)作为计时器,您仍然需要timeBeginPeriod来控制睡眠。
因此,总而言之:
使用睡眠的唯一合理情况是,如果您想减少例如移动设备的CPU使用率。即使那样,您仍将使用Sleep(1); 用它来控制帧速率不是走的路。
强制启用vsync可能是获得固定帧率的一种常见方法,但是即使那样,不同的硬件也将以不同的刷新率运行,并且您将无法在不同的机器上获得一致的固定帧率(这取决于哪种硬件)当然是您的目标)。
在这一点上,有必要提到这篇文章:Gaffer On Games-Fix your Timestep!。这描述了在仿真中获得一致的时间步所需的步骤。
简短的回答:不,不是。
要获得固定的帧速率,您必须调用强制特定帧速率的特定回调函数。显然,如果您现在不知道循环中的单个迭代将花费多长时间,则无法设置固定的睡眠时间。
GLUT提供了glutTimerFunc(),如果您正在OpenGL中编程,则它是您所需的正确函数。看看这个例子,或者这一个。
Sleep
有何不同?