Ruby dormire o ritardare meno di un secondo?


149

Sto realizzando uno script con ruby ​​che deve eseguire il rendering dei frame a 24 frame al secondo, ma devo attendere 1 / 24th di secondo tra l'invio dei comandi. Qual è il modo migliore di dormire per meno di un secondo?

Risposte:


202
sleep(1.0/24.0)

Per quanto riguarda la tua domanda di follow-up se è il modo migliore: No, potresti ottenere framerate non così fluide perché il rendering di ciascun fotogramma potrebbe non richiedere lo stesso tempo.

Puoi provare una di queste soluzioni:

  • Utilizzare un timer che si attiva 24 volte al secondo con il codice di disegno.
  • Crea il maggior numero possibile di frame, crea il movimento in base al tempo trascorso, non per frame.

14
@Funkodebat Sono abbastanza sicuro che ogni runtime Ruby di base fa questo per te.
Georg Schölly,

2
@JosephSilvashy: non ho alcuna idea dell'interprete ruby, ma ruby ​​mri non fa la memoization di default. Ma spero che faccia questo tipo di ottimizzazione durante la conversione del codice sorgente in codice byte.
Georg Schölly,

8
È una buona idea estrarre il valore 1.0 / 24.0 in una variabile per il principio DRY. Anche altre parti di codice avranno bisogno di quel valore, quindi dovresti tenerlo in una posizione centrale per evitare duplicazioni. Se le prestazioni sono un effetto collaterale, allora fantastico!
James Watkins

1
Dovresti assolutamente estrarre la costante e sicuramente non farlo con il motivo "tutte le prestazioni che puoi ottenere"
Blake,

4
Ma è una divisione rapida, eseguita una volta per fotogramma. Si spera che il rendering del frame stesso sia molto più grande nella complessità computazionale. Questo è un brillante esempio di ottimizzazione prematura.
Alan H.

101

Passa il galleggiante a dormire, come sleep 0.1

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.