Ruby spać lub opóźnić mniej niż sekundę?

149

Robię skrypt z rubinem, który musi renderować klatki z prędkością 24 klatek na sekundę, ale muszę odczekać 1/24 sekundy między wysłaniem poleceń. Jaki jest najlepszy sposób na spanie krócej niż sekundę?

JP Silvashy
źródło

Odpowiedzi:

202
sleep(1.0/24.0)

A jeśli chodzi o dalsze pytanie, czy to najlepszy sposób: nie, możesz uzyskać niezbyt płynną liczbę klatek na sekundę, ponieważ renderowanie każdej klatki może nie zająć tyle samo czasu.

Możesz wypróbować jedno z tych rozwiązań:

  • Użyj timera, który uruchamia się 24 razy na sekundę z kodem rysowania.
  • Twórz jak najwięcej klatek, twórz ruch na podstawie upływającego czasu, a nie na klatkę.
Georg Schölly
źródło
14
@Funkodebat Jestem prawie pewien, że każde podstawowe środowisko uruchomieniowe Ruby robi to za Ciebie.
Georg Schölly
2
@JosephSilvashy: Nie mam żadnego wglądu w interpreter języka Ruby, ale Ruby Mri nie robi domyślnie zapamiętywania. Ale mam nadzieję, że dokonuje tego rodzaju optymalizacji podczas konwersji kodu źródłowego do kodu bajtowego.
Georg Schölly
8
Dobrym pomysłem jest wyodrębnienie wartości 1,0 / 24,0 do zmiennej dla zasady DRY. Inne fragmenty kodu również będą potrzebować tej wartości, więc należy przechowywać ją w centralnej lokalizacji, aby uniknąć powielania. Jeśli wydajność jest efektem ubocznym, to świetnie!
James Watkins,
1
Zdecydowanie powinieneś wyodrębnić stałą i zdecydowanie nie robić tego z powodu „całej wydajności, jaką możesz uzyskać”
Blake
4
Ale to szybki podział, wykonywany raz na klatkę. Miejmy nadzieję, że renderowanie samej klatki jest o wiele wielkości większe pod względem złożoności obliczeniowej. To doskonały przykład przedwczesnej optymalizacji.
Alan H.,
101

Podaj pływak do snu, jak sleep 0.1

TY
źródło