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