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.