สมมติว่าคุณต้องการ จำกัด framerate ของคุณเป็น 60fps ซึ่งหมายความว่าทุกเฟรมมีเวลาเรนเดอร์ 1 / 60s = 16,67ms (ปัดเศษ)
ในการ จำกัด อัตราเฟรมของคุณคุณเพียงตรวจสอบเวลาที่เริ่มลูปเกมของคุณคุณสามารถเปรียบเทียบกับเวลาเมื่อสิ้นสุดลูปเกม: หากความแตกต่างน้อยกว่า 16.67ms คุณควรหยุดในเวลานั้น
วิธีหนึ่งในการทำเช่นนี้คือการใช้:
sleep(waittime)
อย่างไรก็ตามตั้งแต่ sleep(x)
ให้เธรดอย่างน้อยx
เสี้ยววินาทีคุณไม่ทราบแน่ชัดว่าคุณจะได้รับการควบคุมย้อนหลังเวลาหรือไม่
วิธีที่ดีกว่าคือการใช้:
while(timediff < 16.67ms){ sleep(0); }
สิ่งนี้ทำให้เธรดและร้องขอการควบคุมกลับมาโดยเร็วที่สุด
วิธีแก้ปัญหาอื่นก็คือมีการวนรอบการรอที่ยุ่งซึ่งจะช่วยให้คุณควบคุมได้ดีที่สุด แต่ใช้ CPU โดยไม่จำเป็น
โปรดจำไว้ว่าตัวกำหนดตารางเวลาระบบปฏิบัติการสามารถควบคุมส่วนต่าง ๆ ได้จากเธรดของคุณดังนั้นเตรียมพร้อมสำหรับความผันผวนบางอย่าง