Supponiamo che tu voglia limitare il tuo framerate a 60fps, ciò significa che ogni fotogramma ha un tempo di rendering di 1 / 60s = 16,67ms (arrotondato)
Per limitare la frequenza dei fotogrammi, basta controllare il tempo all'inizio del ciclo di gioco, quindi è possibile confrontarlo con il tempo alla fine del ciclo di gioco: se la differenza è inferiore a 16,67 ms, è necessario bloccarsi per quel tempo.
Un modo per farlo è usare:
sleep(waittime)
Tuttavia, poiché sleep(x)
restituisce il thread per un minimo di x
millisecondi, non si è certi se si otterrà il controllo indietro nel tempo.
Un modo migliore sarebbe usare:
while(timediff < 16.67ms){ sleep(0); }
Ciò restituisce il thread e richiede il controllo al più presto.
Un'altra soluzione è quella di avere solo un loop di attesa occupato, questo ti dà il miglior controllo ma usa la CPU inutilmente.
Ricorda che lo scheduler del sistema operativo può sempre togliere il controllo dal tuo thread, quindi preparati per alcune fluttuazioni.