SDL_TICKS_PASSED, похоже, не работает - PullRequest
0 голосов
/ 10 июня 2018

SDL_TICKS_PASSED документация

У меня проблемы с настройкой функции "SDL_TICKS_PASSED" SDL2, похоже, она не возвращает true, когда я пытаюсь ее использовать.

Uint32 timeout = SDL_GetTicks() + 100;
if( SDL_TICKS_PASSED(SDL_GetTicks(), timeout) )
{
    printf( "alarm triggered.............\n" );
}

Просто читая документацию, я думаю, что через 100 мс функция вернет true и отобразит сообщение о тревоге.Возможно, я делаю что-то глупое, но если у кого-то есть идеи по этому вопросу, пожалуйста, дайте мне знать.

1 Ответ

0 голосов
/ 10 июня 2018

Проблема в том, что вас 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...
...