Ruby sleep หรือ delay น้อยกว่าหนึ่งวินาที?


149

ฉันสร้างสคริปต์ด้วย ruby ​​ที่ต้องเรนเดอร์เฟรมที่ 24 เฟรมต่อวินาที แต่ฉันต้องรอ 1 / 24th ของวินาทีระหว่างการส่งคำสั่ง วิธีที่ดีที่สุดในการนอนหลับสำหรับน้อยกว่าหนึ่งวินาทีคืออะไร?

คำตอบ:


202
sleep(1.0/24.0)

สำหรับคำถามการติดตามของคุณหากเป็นวิธีที่ดีที่สุด: ไม่คุณอาจได้รับเฟรมเมอร์ที่ไม่ราบรื่นเพราะการเรนเดอร์ของแต่ละเฟรมอาจใช้เวลาไม่เท่ากัน

คุณสามารถลองหนึ่งในวิธีแก้ปัญหาต่อไปนี้:

  • ใช้ตัวจับเวลาที่ยิง 24 ครั้งต่อวินาทีด้วยรหัสวาด
  • สร้างเฟรมให้มากที่สุดสร้างการเคลื่อนไหวตามเวลาที่ผ่านมาไม่ใช่ต่อเฟรม

14
@Fodeodebat ฉันค่อนข้างแน่ใจว่าทุกรูบีพื้นฐานจะทำสิ่งนี้ให้คุณ
Georg Schölly

2
@JosephSilvashy: ฉันไม่มีความเข้าใจอย่างถ่องแท้เกี่ยวกับล่ามทับทิม แต่ ruby ​​mri ไม่ได้ทำการบันทึกความจำตามค่าเริ่มต้น แต่ฉันหวังว่าจะทำการเพิ่มประสิทธิภาพแบบนี้ในขณะที่การแปลงซอร์สโค้ดเป็นโค้ดไบต์
Georg Schölly

8
เป็นความคิดที่ดีที่จะดึงค่า 1.0 / 24.0 ไปยังตัวแปรสำหรับหลักการ DRY ส่วนรหัสอื่น ๆ จะต้องมีค่าเช่นกันดังนั้นคุณควรเก็บไว้ในตำแหน่งกลางเพื่อหลีกเลี่ยงการทำซ้ำ หากประสิทธิภาพเป็นผลข้างเคียงก็ยอดเยี่ยม!
James Watkins

1
คุณควรแยกค่าคงที่และไม่ทำด้วยเหตุผล "ประสิทธิภาพทั้งหมดที่คุณจะได้รับ"
Blake

4
แต่มันเป็นการแบ่งที่รวดเร็ววิ่งหนึ่งครั้งต่อเฟรม หวังว่าการเรนเดอร์ของเฟรมจะมีขนาดใหญ่ขึ้นในความซับซ้อนในการคำนวณ นี่เป็นตัวอย่างที่ยอดเยี่ยมของการเพิ่มประสิทธิภาพก่อนวัยอันควร
Alan H.

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.