Angenommen, Sie möchten Ihre Framerate auf 60 fps beschränken. Dies bedeutet, dass jeder Frame eine Renderzeit von 1 / 60s = 16,67 ms (gerundet) hat.
Um Ihre Framerate zu begrenzen, überprüfen Sie einfach die Zeit zu Beginn Ihrer Spielschleife und können sie dann mit der Zeit am Ende der Spielschleife vergleichen: Wenn die Differenz weniger als 16,67 ms beträgt, sollten Sie für diese Zeit stehen bleiben.
Eine Möglichkeit, dies zu tun, besteht darin, Folgendes zu verwenden:
sleep(waittime)
Da sleep(x)
der Thread jedoch für ein Minimum von x
Millisekunden ausgegeben wird, wissen Sie nicht sicher, ob Sie die Kontrolle in der Zeit zurückerhalten werden.
Ein besserer Weg wäre zu verwenden:
while(timediff < 16.67ms){ sleep(0); }
Dies gibt den Thread zurück und fordert die Kontrolle so schnell wie möglich zurück.
Eine andere Lösung besteht darin, nur eine ausgelastete Warteschleife zu haben. Dies gibt Ihnen die beste Kontrolle, nutzt aber die CPU unnötig.
Denken Sie daran, dass der OS-Scheduler Ihrem Thread jederzeit die Kontrolle entziehen kann. Seien Sie also auf Schwankungen vorbereitet.