【发布时间】:2014-06-09 03:12:03
【问题描述】:
我正在编写一个 C++/SDL/OpenGL 应用程序,我遇到了最奇特的错误。游戏似乎在一个简单的可变时间步长下运行良好。但随后 FPS 开始表现得很奇怪。我发现 Sleep(1) 和 SDL_Delay(1) 都需要 15 毫秒才能完成。
在 0-15 之间输入这些函数需要 15 毫秒才能完成,将 FPS 锁定在 64 左右。如果我将其设置为 16,则需要 30 毫秒 O.O
我的循环如下所示:
while (1){
GLuint t = SDL_GetTicks();
Sleep(1); //or SDL_Delay(1)
cout << SDL_GetTicks() - t << endl; //outputs 15
}
它很少需要 1 毫秒,但大部分时间需要 15 毫秒。
我的操作系统是 windows 8.1。 CPU是intel i7。我正在使用 SDL2。
【问题讨论】:
-
如果您希望线程/进程实时唤醒,您不想让它进入睡眠状态。如果您不想担心日程安排,请使用自旋锁。