Рубі спати чи затримувати менше секунди?


149

Я роблю сценарій з рубіном, який повинен відтворювати кадри зі швидкістю 24 кадри в секунду, але мені потрібно зачекати 1/24 секунди між відправленням команд. Який найкращий спосіб спати менше секунди?

Відповіді:


202
sleep(1.0/24.0)

Що стосується вашого подальшого запитання, якщо це найкращий спосіб: Ні, у вас можуть вийти не дуже гладкі рамки, оскільки візуалізація кожного кадру може зайняти стільки ж часу.

Ви можете спробувати одне з таких рішень:

  • Використовуйте таймер, який спрацьовує 24 рази на секунду за допомогою креслення коду.
  • Створіть якомога більше кадрів, створіть рух на основі пройденого часу, а не на кадр.

14
@Funkodebat Я впевнений, що кожен базовий час виконання рубіну робить це за вас.
Георг Шоллі

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

8
Добра ідея отримати значення 1,0 / 24,0 до змінної за принципом DRY. Інші фрагменти коду також потребують цього значення, тому вам слід тримати його в центральному місці, щоб уникнути дублювання. Якщо продуктивність є побічним ефектом, то чудово!
Джеймс Уоткінс

1
Ви обов'язково повинні витягувати константу, і, безумовно, не робити цього з причини "всі виступи, які ви можете отримати"
Блейк

4
Але це швидкий поділ, пробіг один раз на кадр. Сподіваємось, саме відображення кадру набирає велику величину в обчислювальній складності. Це геніальний приклад передчасної оптимізації.
Алан Х.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.