Скажем, вы хотите ограничить частоту кадров до 60 кадров в секунду, это означает, что каждый кадр имеет время рендеринга 1/60 с = 16,67 мс (округлено)
Чтобы ограничить частоту кадров, вы просто проверяете время в начале игрового цикла, затем вы можете сравнить его со временем в конце игрового цикла: если разница меньше 16,67 мс, вы должны остановиться на это время.
Один из способов сделать это - использовать:
sleep(waittime)
Однако, поскольку sleep(x)
выдает поток за минимальные x
миллисекунды, вы точно не знаете, вернетесь ли вы назад во времени.
Лучшим способом было бы использовать:
while(timediff < 16.67ms){ sleep(0); }
Это возвращает поток и запрашивает контроль как можно скорее.
Другое решение состоит в том, чтобы просто иметь занятый цикл ожидания, это дает вам лучший контроль, но использует ЦП без необходимости.
Помните, что планировщик ОС всегда может отобрать управление у вашего потока, поэтому будьте готовы к некоторым колебаниям.