История изменений
Исправление a1ba, (текущая версия) :
Для этого у меня есть переменная которая хранит время чисто игрового кадра.
Если задача синхронизироваться по 60 тикам в секунду, а это 16.(6) миллисекунд, то из него вычитается чистое время кадра и небольшое окно для переключения в busy-wait. Окно можно двигать в зависимости от графика времени кадра, но у меня пока что проще.
Допустим, время кадра 1мс и окно например три таких кадра, то есть 3мс. Вычитая, получается 12.(6) мс. Далее, можно в этом интервале прогонять sleep, замеряя время самого sleep.
В конце концов получается не нагружающий CPU поток в котором крутится игровая логика, к тому же без попытки использовать платформо-специфичный HPET.
Кстати, забавно, но в моих экспериментах задержка в Windows была гораздо больше, чем в Linux.
Исправление a1ba, :
Для этого у меня есть переменная которая хранит время чисто игрового кадра.
Если задача синхронизироваться по 60 тикам в секунду, а это 16.(6) миллисекунд, то из него вычитается чистое время кадра и небольшое окно для переключения в busy-wait. Окно можно двигать в зависимости от графика кадра.
Допустим, время кадра 1мс и окно например три таких кадра, то есть 3мс. Вычитая, получается 12.(6) мс. Далее, можно в этом интервале прогонять sleep, замеряя время самого sleep.
В конце концов получается не нагружающий CPU поток в котором крутится игровая логика, к тому же без попытки использовать платформо-специфичный HPET.
Кстати, забавно, но в моих экспериментах задержка в Windows была гораздо больше, чем в Linux.
Исходная версия a1ba, :
Для этого у меня есть переменная которая хранит время чисто игрового кадра.
Если задача синхронизироваться по 60 тикам в секунду, а это 16.(6) миллисекунд, то из него вычитается чистое время кадра и небольшое окно для переключения в busy-wait.
Допустим, время кадра 1мс и окно например три таких кадра, то есть 3мс. Вычитая, получается 12.(6) мс. Далее, можно в этом интервале прогонять sleep, замеряя время самого sleep.
В конце концов получается не нагружающий CPU поток в котором крутится игровая логика, к тому же без попытки использовать платформо-специфичный HPET.
Кстати, забавно, но в моих экспериментах задержка в Windows была гораздо больше, чем в Linux.