Проблема в том, что вас SDL_TICKS_PASSED
вызывают только один раз.Он вернет true
после 100 тиков, но не будет блокироваться, пока не истечет этот тайм-аут.Таким образом, первый вызов немедленно возвращает false
.Для достижения блокирующего поведения его следует проверять в цикле:
Uint32 timeout = SDL_GetTicks() + 100;
while (!SDL_TICKS_PASSED(SDL_GetTicks(), timeout))
{
/* wasting CPU time... */
}
// ok, 100 ticks elapsed when we get here...
или использовать выделенную функцию ожидания SDL_Delay
:
SDL_Delay(100);
// ok, 100 ticks elapsed when we get here, no need for loops...