Ruby ngủ hay chậm hơn một giây?


149

Tôi đang tạo một kịch bản với ruby ​​phải kết xuất khung hình ở 24 khung hình mỗi giây, nhưng tôi cần đợi 1/2 giây trong khi gửi lệnh. Cách tốt nhất để ngủ ít hơn một giây là gì?

Câu trả lời:


202
sleep(1.0/24.0)

Đối với câu hỏi tiếp theo của bạn nếu đó là cách tốt nhất: Không, bạn có thể nhận được các khung hình không quá mượt vì việc hiển thị từng khung hình có thể không mất cùng thời gian.

Bạn có thể thử một trong những giải pháp sau:

  • Sử dụng bộ hẹn giờ kích hoạt 24 lần một giây với mã bản vẽ.
  • Tạo càng nhiều khung hình càng tốt, tạo chuyển động dựa trên thời gian trôi qua, không phải trên mỗi khung hình.

14
@Funkodebat Tôi khá chắc chắn rằng mọi thời gian chạy ruby ​​cơ bản đều làm điều này cho bạn.
Georg Schölly

2
@JosephSilvashy: Tôi không có cái nhìn sâu sắc về trình thông dịch ruby, nhưng ruby ​​mri không thực hiện ghi nhớ theo mặc định. Nhưng tôi hy vọng nó thực hiện loại tối ưu hóa này trong khi chuyển đổi mã nguồn thành mã byte.
Georg Schölly

8
Đó là một ý tưởng tốt để trích xuất giá trị 1.0 / 24.0 thành một biến cho nguyên tắc DRY. Các đoạn mã khác cũng sẽ cần giá trị đó, vì vậy bạn nên giữ nó ở vị trí trung tâm để tránh trùng lặp. Nếu hiệu suất là một tác dụng phụ, thì tuyệt vời!
James Watkins

1
Bạn chắc chắn nên trích xuất hằng số, và chắc chắn không làm điều đó với lý do "tất cả hiệu suất bạn có thể nhận được"
Blake

4
Nhưng đó là một phân chia nhanh, chạy một lần trên mỗi khung. Hy vọng rằng việc hiển thị khung chính nó có nhiều cường độ lớn hơn trong độ phức tạp tính toán. Đây là một ví dụ tuyệt vời về tối ưu hóa sớm.
Alan H.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.