Ruby tidur atau menunda kurang dari satu detik?

149

Saya membuat skrip dengan ruby ​​yang harus merender frame pada 24 frame per detik, tapi saya harus menunggu 1/24 detik antara mengirim perintah. Apa cara terbaik untuk tidur kurang dari sedetik?

JP Silvashy
sumber

Jawaban:

202
sleep(1.0/24.0)

Mengenai pertanyaan tindak lanjut Anda jika itu cara terbaik: Tidak, Anda bisa mendapatkan framerate yang tidak terlalu lancar karena rendering setiap frame mungkin tidak membutuhkan jumlah waktu yang sama.

Anda dapat mencoba salah satu solusi ini:

  • Gunakan timer yang menyala 24 kali per detik dengan kode gambar.
  • Buat frame sebanyak mungkin, buat gerakan berdasarkan waktu berlalu, bukan per frame.
Georg Schölly
sumber
14
@Funkodebat Saya cukup yakin setiap runtime ruby ​​dasar melakukan ini untuk Anda.
Georg Schölly
2
@JosephSilvashy: Saya tidak memiliki wawasan tentang penerjemah ruby, tetapi ruby ​​mri tidak melakukan memoisasi secara default. Tapi saya harap ini melakukan optimasi semacam ini sambil mengubah kode sumber ke kode byte.
Georg Schölly
8
Merupakan ide bagus untuk mengekstraksi nilai 1.0 / 24.0 ke variabel untuk prinsip KERING. Potongan kode lain akan membutuhkan nilai itu juga, jadi Anda harus menyimpannya di lokasi pusat untuk menghindari duplikasi. Jika kinerja adalah efek samping, maka hebat!
James Watkins
1
Anda harus mengekstrak konstanta, dan tentu saja tidak melakukannya dengan alasan "semua kinerja yang bisa Anda dapatkan"
Blake
4
Tapi itu pembagian cepat, dijalankan sekali per frame. Semoga rendering frame itu sendiri jauh lebih besar dalam kompleksitas komputasi. Ini adalah contoh cemerlang dari optimasi prematur.
Alan H.
101

Lulus mengapung untuk tidur, seperti sleep 0.1

KAMU
sumber