проблема glutTimerFunc - PullRequest
       4

проблема glutTimerFunc

4 голосов
/ 27 августа 2011

Я использую Glut, чтобы сделать простую анимацию. В основной функции вызывается glutTimerFunc(TIMERMSECS, animate, 0). Две части кода генерируют одну и ту же графику.

const int TIMERMSECS = 20;
float animation_time = 0;
const float  animation_step = .5;

Метод 1:

   void animate(int t){
        float time_elapsed = TIMERMSECS/1000.0;
        float current_step = animation_step* time_elapsed;
        glutTimerFunc(TIMERMSECS, animate, 0);
        if(current_step < animation_step*2) 
                animation_time += current_step;
        glutPostRedisplay();
}

Метод 2:

   void animate(int t){
        float time_elapsed = TIMERMSECS/1000.0;
        float current_step = animation_step* time_elapsed;      
        if(current_step < animation_step*2) 
                animation_time += current_step;
        glutPostRedisplay();
       glutTimerFunc(TIMERMSECS, animate, 0);
}

Единственная разница между ними - позиция glutTimerFunc. Для Method 1 это похоже на рекурсив, который никогда не достигнет конца функции animate(). Но почему это все еще работает?

1 Ответ

3 голосов
/ 27 августа 2011

glutTimerFunc не будет немедленно вызывать функцию таймера ни при каких обстоятельствах. Даже если время равно 0. Он всегда ожидает цикла обработки сообщений, и даже тогда он будет вызывать запрошенную функцию только после завершения всей остальной обработки сообщений. Таким образом, важные сообщения, такие как «окно перекраски» и «окно изменения размера», все еще обрабатываются.

В общем, вы не должны полагаться на точность функции таймера.

...