¿Ruby duerme o demora menos de un segundo?

149

Estoy haciendo un script con ruby ​​que debe procesar cuadros a 24 cuadros por segundo, pero necesito esperar 1/24 de segundo entre el envío de los comandos. ¿Cuál es la mejor manera de dormir por menos de un segundo?

JP Silvashy
fuente

Respuestas:

202
sleep(1.0/24.0)

En cuanto a su pregunta de seguimiento si esa es la mejor manera: No, podría obtener velocidades de fotogramas no tan suaves porque la representación de cada fotograma podría no tomar la misma cantidad de tiempo.

Puede probar una de estas soluciones:

  • Use un temporizador que dispare 24 veces por segundo con el código de dibujo.
  • Cree tantos fotogramas como sea posible, cree el movimiento en función del tiempo transcurrido, no por fotograma.
Georg Schölly
fuente
14
@ Funkodebat Estoy bastante seguro de que cada tiempo de ejecución básico de Ruby hace esto por usted.
Georg Schölly
2
@JosephSilvashy: No tengo ninguna idea sobre el intérprete de ruby, pero ruby ​​mri no hace memorización por defecto. Pero espero que haga este tipo de optimización mientras convierte el código fuente en código de bytes.
Georg Schölly
8
Es una buena idea extraer el valor 1.0 / 24.0 a una variable para el principio DRY. Otros fragmentos de código también necesitarán ese valor, por lo que debe mantenerlo en una ubicación central para evitar duplicaciones. Si el rendimiento es un efecto secundario, ¡genial!
James Watkins
1
Definitivamente debe extraer la constante, y definitivamente no hacerlo con la razón "todo el rendimiento que puede obtener"
Blake
44
Pero es una división rápida, que se ejecuta una vez por cuadro. Esperemos que la representación del marco en sí sea de muchas magnitudes mayores en complejidad computacional. Este es un brillante ejemplo de optimización prematura.
Alan H.
101

Pase el flotador a dormir, como sleep 0.1


fuente