Bạn không bao giờ nên, không bao giờ, bao giờ, bao giờ, sử dụng Ngủ để kiểm soát tốc độ khung hình .
Điều này đã được đưa ra trước đây và tôi sẽ giới thiệu cho bạn câu hỏi khác để thảo luận về lý do tại sao. Một điều không được đề cập ở đây là ở tốc độ làm mới hiện đại điển hình là 60Hz và với độ chi tiết 1 mili giây điển hình của các cuộc gọi Ngủ, thực sự không thể Ngủ trong khoảng thời gian chính xác giữa các khung.
Tôi không nói rằng việc mang lại CPU nếu bạn không có gì để làm là một điều tồi tệ; cách xa nó. Nhưng nó không giống như kiểm soát tốc độ khung hình và Ngủ là một giải pháp phù hợp với cái trước nhưng không phải cái sau.
Thay vào đó, hãy kiểm tra thời gian đã trôi qua và nếu đã đến lúc chạy một khung hình, thì hãy làm điều đó, nếu không - và nếu bạn muốn mang lại một số CPU - Ngủ trong thời gian tối thiểu - 1 mili giây. Cũng đảm bảo rằng bộ hẹn giờ ngủ của bạn được thiết lập phù hợp cho nền tảng của bạn để cung cấp cho bạn độ phân giải tốt; tức là khi bạn thực hiện cuộc gọi "Ngủ (1)" đó, bạn thực sự có cơ hội thực sự Ngủ trong 1 mili giây, thay vì một cái gì đó như 15, 20 hoặc 30 (sẽ là trường hợp khác). Tôi tin rằng SDL sẽ tự động làm điều này cho bạn.
Bạn cũng có thể xây dựng một số chùng vào nó, để nếu gần đến giờ chạy khung, bạn dừng Ngủ và bắt đầu chạy thẳng cho đến khi khung chạy, điều này có thể giúp bạn đạt được khoảng thời gian khung mong muốn chính xác hơn.
Điều này cuối cùng trông giống như một loạt các cuộc gọi Ngủ (1) xen kẽ với khung thỉnh thoảng và điều đó ổn. Bạn vẫn đang từ bỏ CPU khi bạn không cần nó, nhưng khung của bạn vẫn có thể chạy đúng giờ.