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?

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.

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.