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ę?

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ę.

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.,

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.