Рубиновый сон или задержка менее секунды?


149

Я делаю скрипт с ruby, который должен рендерить кадры со скоростью 24 кадра в секунду, но мне нужно подождать 1/24 секунды между отправкой команд. Как лучше всего спать меньше секунды?

Ответы:


202
sleep(1.0/24.0)

Что касается вашего последующего вопроса, если это лучший способ: Нет, вы можете получить не очень плавные частоты кадров, потому что рендеринг каждого кадра может не занимать одинаковое количество времени.

Вы можете попробовать одно из следующих решений:

  • Используйте таймер, который срабатывает 24 раза в секунду с кодом рисования.
  • Создайте как можно больше кадров, создавайте движение на основе прошедшего времени, а не на кадр.

14
@Funkodebat Я уверен, что каждая базовая среда исполнения ruby ​​делает это для вас.
Георг Шолли

2
@JosephSilvashy: я не имею никакого представления о переводчике ruby, но ruby ​​mri по умолчанию не делает заметок. Но я надеюсь, что он выполняет такую ​​оптимизацию при преобразовании исходного кода в байт-код.
Георг Шолли

8
Хорошая идея - извлечь значение 1.0 / 24.0 в переменную по принципу СУХОЙ. Это значение потребуется и другим фрагментам кода, поэтому вы должны хранить его в центральном месте, чтобы избежать дублирования. Если производительность является побочным эффектом, то отлично!
Джеймс Уоткинс

1
Вы должны определенно извлечь константу, и определенно не делать это с причиной "все производительность, которую вы можете получить"
Блейк

4
Но это быстрое деление, запускается один раз за кадр. Надеемся, что рендеринг самого фрейма во много раз больше в вычислительной сложности. Это яркий пример преждевременной оптимизации.
Алан Х.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.