Чи безпечно використовувати функцію Sleep () для Windows в ігровому циклі (C ++)? Я хочу мати фіксовану частоту кадрів.
Чи безпечно використовувати функцію Sleep () для Windows в ігровому циклі (C ++)? Я хочу мати фіксовану частоту кадрів.
Відповіді:
Ні це не так. Сон гарантує лише мінімальний час для сну, але він фактично може спати протягом будь-якої довільної кількості часу. Ваша роздільна здатність таймера (встановлена через timeBeginPeriod) також важлива для цього, і навіть якщо ви використовуєте для свого таймера щось інше (наприклад, QueryPerformanceCounter), вам все одно потрібен timeBeginPeriod для контролю сну.
Отже, підсумовуючи:
Єдиним розумним випадком використання режиму сну є те, якщо ви хочете зменшити використання процесора, наприклад, для мобільних пристроїв. Вже тоді ви використовуєте сон (1); використовувати його для управління частотами кадрів - це не шлях.
Примусове ввімкнення vsync - це, мабуть, один поширений спосіб отримати фіксовану частоту кадрів, але навіть тоді різне обладнання буде працювати з різною швидкістю оновлення, і ви не зможете мати постійний фіксований кадр на різних машинах (це залежить від того, яке обладнання ви орієнтуєтеся звичайно).
На даний момент часу потрібно згадати цю статтю: Gaffer On Games - Fix Your Timetep! . Це описує кроки, необхідні для отримання послідовного часового кроку у вашому моделюванні.
Коротка відповідь: ні, це не так.
Щоб мати фіксовану частоту кадрів, потрібно викликати певну функцію зворотного дзвінка, яка примушує певну частоту кадрів. Очевидно, якщо ви зараз не зробите, скільки часу триватиме одна ітерація в циклі, ви не можете встановити фіксований час сну.
GLUT забезпечує glutTimerFunc () , тобто, якщо ви програмуєте в OpenGL, потрібну вам потрібну функцію. Погляньте на цей приклад , чи на цей .
Sleep
?