Ruby dormir ou retarder moins d'une seconde?

149

Je crée un script avec ruby ​​qui doit rendre les images à 24 images par seconde, mais je dois attendre 1 / 24e de seconde entre l'envoi des commandes. Quelle est la meilleure façon de dormir moins d'une seconde?

JP Silvashy
la source

Réponses:

202
sleep(1.0/24.0)

En ce qui concerne votre question de suivi, si c'est la meilleure façon: Non, vous pourriez obtenir des fréquences d'images moins fluides car le rendu de chaque image pourrait ne pas prendre le même temps.

Vous pouvez essayer l'une de ces solutions:

  • Utilisez une minuterie qui se déclenche 24 fois par seconde avec le code de dessin.
  • Créez autant d'images que possible, créez le mouvement en fonction du temps passé et non par image.
Georg Schölly
la source
14
@Funkodebat Je suis presque sûr que chaque runtime de base de ruby ​​le fait pour vous.
Georg Schölly
2
@JosephSilvashy: Je n'ai aucune idée de l'interpréteur ruby, mais ruby ​​mri ne fait pas de mémorisation par défaut. Mais j'espère qu'il fera ce genre d'optimisation lors de la conversion du code source en code octet.
Georg Schölly
8
C'est une bonne idée d'extraire la valeur 1.0 / 24.0 en une variable pour le principe DRY. D'autres morceaux de code auront également besoin de cette valeur, vous devez donc le conserver dans un emplacement central pour éviter la duplication. Si la performance est un effet secondaire, alors tant mieux!
James Watkins
1
Vous devez absolument extraire la constante, et certainement pas le faire avec la raison "toutes les performances que vous pouvez obtenir"
Blake
4
Mais c'est une division rapide, exécutée une fois par image. Espérons que le rendu de la trame elle-même est beaucoup plus grand en complexité de calcul. C'est un brillant exemple d'optimisation prématurée.
Alan H.
101

Passer le flotteur pour dormir, comme sleep 0.1

TU
la source