Giả sử bạn muốn giới hạn tốc độ khung hình của mình ở mức 60fps, điều đó có nghĩa là mọi khung hình đều có thời gian kết xuất là 1 / 60s = 16,67ms (làm tròn)
Để giới hạn tốc độ khung hình của bạn, bạn chỉ cần kiểm tra thời gian khi bắt đầu vòng lặp trò chơi của mình, sau đó bạn có thể so sánh nó với thời gian ở cuối vòng lặp trò chơi: nếu chênh lệch nhỏ hơn 16,67ms, bạn nên dừng lại ở thời điểm đó.
Một cách để làm điều này là sử dụng:
sleep(waittime)
Tuy nhiên, vì sleep(x)
mang lại luồng trong tối thiểu một phần x
nghìn giây mà bạn không biết chắc chắn liệu mình có kịp kiểm soát hay không.
Một cách tốt hơn sẽ là sử dụng:
while(timediff < 16.67ms){ sleep(0); }
Điều này mang lại chủ đề và yêu cầu kiểm soát trở lại càng sớm càng tốt.
Một giải pháp khác là chỉ cần có một vòng chờ bận rộn, điều này cho phép bạn kiểm soát tốt nhất nhưng sử dụng CPU một cách không cần thiết.
Hãy nhớ rằng bộ lập lịch hệ điều hành luôn có thể lấy đi quyền kiểm soát từ luồng của bạn, vì vậy hãy chuẩn bị cho một số biến động.