Supposons que vous souhaitiez limiter votre fréquence d'images à 60 images par seconde, cela signifie que chaque image a un temps de rendu de 1 / 60s = 16,67 ms (arrondi)
Pour limiter votre fréquence d'images, il vous suffit de vérifier l'heure au début de votre boucle de jeu, vous pouvez ensuite la comparer avec l'heure à la fin de la boucle de jeu: si la différence est inférieure à 16,67 ms, vous devez caler pendant ce temps.
Pour ce faire, vous pouvez utiliser:
sleep(waittime)
Cependant, puisque sleep(x)
donne le fil pour un minimum de x
millisecondes, vous ne savez pas avec certitude si vous reprendrez le contrôle dans le temps.
Une meilleure façon serait d'utiliser:
while(timediff < 16.67ms){ sleep(0); }
Cela renvoie le fil et demande le contrôle dès que possible.
Une autre solution consiste à avoir juste une boucle d'attente occupée, cela vous donne le meilleur contrôle mais utilise le processeur inutilement.
N'oubliez pas que le planificateur du système d'exploitation peut toujours prendre le contrôle de votre thread, alors préparez-vous à certaines fluctuations.