Возможно, есть что-то, чего я не понимаю в типичных приложениях?Нужно ли Windows периодически перехватывать циклы процессора?
Да, абсолютно.Windows одновременно запускает множество процессов.Теперь ваше приложение приходит и выполняет то, что по сути является занятым циклом вращения.В какой-то момент ОС, скорее всего, будет расставлять приоритеты дольше, чем вы ожидаете, потому что это просто выглядит как долгий расчет, и ОС должна предоставлять другим процессам достаточную долю процессорного времени.
В целомВы не должны полагаться на то, что ваша процедура рисования вызывается точное число раз в секунду, а мастер-часы вашей игры должны справляться с пропущенными кадрами.Я не знаком с SFML, поэтому не могу комментировать это.
Однако у меня есть опыт работы с аудио в реальном времени (и видео в этом отношении), работающим в циклах, которые превышают 1000 обновлений в секунду.Вы можете улучшить свою долю времени игрового цикла, установив приоритет потока в THREAD_PRIORITY_HIGHEST или THREAD_PRIORITY_TIME_CRITICAL (см. SetThreadPriority ).
Для того, чтобы это было эффективным, вы также должны быть приложением с хорошим поведением и периодическивыполнить какое-то ожидание.Ожидание позволяет ОС выполнить необходимое переключение задач для обслуживания других процессов (некоторые из которых также будут иметь высокий приоритет, а зачастую и более высокий, чем вы сможете использовать в качестве приложения пользовательского пространства).
ОчевидноеМесто для ожидания до вашего следующего цикла розыгрыша.Вместо того, чтобы крутить таймер со 100% использованием ядра, просто посчитайте, сколько времени вы готовы ждать и позвоните std::this_thread::sleep_for
.Помните, что единственной гарантией является то, что сон будет на не менее указанной вами суммы.Это может быть и будет больше, чем это.Но я рекомендую вам начать с экспериментов.