Если вы не используете какие-либо другие синхронизированные блоки, значит, нет никого, кто бы мог notify()
ваш поток. Это означает, что вы, вероятно, говорите, что ваше приложение должно спать не менее 3 миллисекунд на каждой итерации. Кроме того, вы можете потерять еще немного времени из-за того, что поток отдает свой квант времени при переходе в спящий режим, а разрешение часов также обычно превышает 1 мс, в зависимости от ОС.
64 FPS означает, что кадр занимает чуть более 15 мс. Скажите нам, каков ваш «незакрытый» FPS, подсчитайте, сколько мс на кадр он переводит, и посмотрите, в чем разница. Если разница во времени кадра без потерянного кода составляет порядка 3-10 мс (10 мс, вероятно, является разумным верхним пределом гранулярности тактовой частоты в нормальной системе), это, вероятно, является только результатом wait()
, Если без wait()
ваши кадры занимают всего 1 мс, возможно, есть некоторый дополнительный эффект.
РЕДАКТИРОВАТЬ после комментария Яна : 115 FPS означает 8,7 мс на кадр. Переход от этого к 15 из-за wait(3)
кажется вероятным. Я не уверен, как запуск другого приложения в фоновом режиме может повлиять на это. Возможно, наличие другой задачи в фоновом режиме влияет на поведение планировщика. Приносит ли другая задача FPS обратно к 115 или к некоторому промежуточному значению?
РЕДАКТИРОВАТЬ после второго комментария Яна : если 180 вместо 115, у нас 5,5 мс на кадр. Это увеличивает разницу, но поскольку часы Windows довольно грубые (как указывали другие), это все еще в пределах эффекта, описанного выше.