Безопасно ли использовать функцию Sleep () в Windows в игровом цикле (C ++)? Я хочу иметь фиксированную частоту кадров.
Безопасно ли использовать функцию Sleep () в Windows в игровом цикле (C ++)? Я хочу иметь фиксированную частоту кадров.
Ответы:
Нет, это не так. Сон гарантирует только минимальное время для сна, но на самом деле он может спать в течение любого произвольного промежутка времени. Разрешение таймера (установленное с помощью timeBeginPeriod) также важно для него, и даже если вы используете что-то другое (например, QueryPerformanceCounter) для своего таймера, вам все еще нужен timeBeginPeriod для управления Sleep.
Итак, в заключение:
Единственный разумный вариант использования Sleep - это если вы хотите уменьшить загрузку процессора, например, для мобильных устройств. Даже тогда вы будете использовать Sleep (1); использование его для управления частотой кадров не является подходящим способом.
Включение vsync, вероятно, является одним из распространенных способов получения фиксированной частоты кадров, но даже в этом случае разное оборудование будет работать с разной частотой обновления, и вы не сможете иметь постоянную фиксированную частоту кадров на разных компьютерах (это зависит от того, какое оборудование ты нацеливаешься конечно).
На данный момент необходимо упомянуть эту статью: Gaffer On Games - исправь свой временной шаг! , Здесь описаны шаги, необходимые для получения последовательного временного шага в симуляции.
Краткий ответ: нет, это не так.
Чтобы иметь фиксированную частоту кадров, вы должны вызвать определенную функцию обратного вызова, которая вызывает определенную частоту кадров. Очевидно, что если вы не знаете, сколько времени займет одна итерация в цикле, вы не сможете установить фиксированное время ожидания.
GLUT предоставляет glutTimerFunc () , которая, если вы программируете в OpenGL, является нужной вам функцией. Взгляните на этот пример или этот .
Sleep
?