我以为我跳过了一个水坑,结果却掉进了大海:/
我正在尝试实现一个 5 秒计时器(不需要超过毫秒)。
我的目标:
// I start the program in gamestate 0...
{
if (button_has_been_pressed == 1)
{
gamestate = 1;
}
}
if (gamestate==1)
{
//wait for 5 seconds and go to gamestate2
gamestate = 2;
}
我尝试了以下方法:
GLUT_TIME_ELAPSED 从我的程序开始测量时间。进入 gamestate1 后,我无法“重置”GLUT_TIME_ELAPSED。否则,它会很好地工作。
gettimeofday 给了我比我需要的更多的分辨率。最多可以应用毫秒。
不管我的分辨率需求如何,我都尝试过宋浩的方法:
gamestate1_elapsedTime = (t2.tv_sec - t1.tv_sec) * 1000.0; // sec to ms
gamestate1_elapsedTime += (t2.tv_usec - t1.tv_usec) / 1000.0; // us to ms
// add that elapsed time together, and keep track of its total
//r_gamestate1_elapsedTime_total = gamestate1_elapsedTime;
//if (r_gamestate1_elapsedTime_total > 5 seconds) ...
然而,gamestate1_elapsedTime 似乎有一些可变性。因为输出很少是一致的。我想这是 b/c gettimeofday 使用 CPU 时间(?),我用我的 fps 夹人为地夹住它。
- 我也尝试过 clock() ,但这似乎也是 CPU 时间 - 而不是挂墙时间。
如上所述,GLUT_ELAPSED_TIME 效果很好,除了我无法在程序中途重置它,而且我的 5 秒不再依赖于我最初的按钮单击。
如果您能提供一些建议,我将非常感激即使是朝着正确的方向轻推。非常感谢您提前。
-克罗普克