Ruby uyuyor mu yoksa bir saniyeden az mı gecikmeli?


151

Yakut içeren ve saniyede 24 kare ile kare oluşturması gereken bir komut dosyası yapıyorum, ancak komutları gönderme arasında saniyenin 1 / 24'ü beklemem gerekiyor. Bir saniyeden az uyumanın en iyi yolu nedir?

Yanıtlar:


204
sleep(1.0/24.0)

Takip eden sorunuza gelince, en iyi yol buysa: Hayır, o kadar düzgün olmayan kare hızları elde edebilirsiniz çünkü her karenin oluşturulması aynı süreyi almayabilir.

Şu çözümlerden birini deneyebilirsiniz:

  • Çizim kodu ile saniyede 24 kez ateşleyen bir zamanlayıcı kullanın.
  • Mümkün olduğunca çok kare oluşturun, hareketi kare başına değil, geçen süreye göre oluşturun.

14
@Funkodebat Her temel Ruby çalışma zamanının bunu sizin için yaptığından oldukça eminim.
Georg Schölly

2
@JosephSilvashy: Ruby yorumlayıcısına dair herhangi bir fikrim yok, ancak Ruby mri varsayılan olarak hatırlatma yapmıyor. Ama umarım kaynak kodunu bayt koduna dönüştürürken bu tür bir optimizasyon yapar.
Georg Schölly

8
KURU ilkesi için 1.0 / 24.0 değerini bir değişkene çıkarmak iyi bir fikirdir. Diğer kod parçaları da bu değere ihtiyaç duyacaktır, bu nedenle tekrarlamadan kaçınmak için onu merkezi bir konumda tutmalısınız. Performans bir yan etkiyse, harika!
James Watkins

1
Sabiti kesinlikle çıkarmalısınız ve kesinlikle "alabileceğiniz tüm performans" nedeni ile yapmamalısınız
Blake

4
Ancak kare başına bir kez çalıştırılan hızlı bir bölümdür. Umarım çerçevenin kendisinin oluşturulması, hesaplama karmaşıklığında birçok büyüklükten daha fazladır. Bu, erken optimizasyonun mükemmel bir örneğidir.
Alan H.

103

Şamandırayı uyumaya geç, gibi sleep 0.1

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.