Ruby dorme ou demora menos de um segundo?

149

Estou criando um script com ruby ​​que deve renderizar quadros a 24 quadros por segundo, mas preciso esperar 1/24 de segundo entre o envio dos comandos. Qual é a melhor maneira de dormir por menos de um segundo?

JP Silvashy
fonte

Respostas:

202
sleep(1.0/24.0)

Quanto à sua pergunta de acompanhamento, se essa é a melhor maneira: Não, você pode obter taxas de quadros não tão suaves, porque a renderização de cada quadro pode não levar a mesma quantidade de tempo.

Você pode tentar uma destas soluções:

  • Use um timer que dispara 24 vezes por segundo com o código do desenho.
  • Crie o maior número possível de quadros, crie o movimento com base no tempo passado, não por quadro.
Georg Schölly
fonte
14
@Funkodebat Tenho certeza que todo tempo de execução básico do ruby ​​faz isso por você.
Georg Schölly
2
@JosephSilvashy: Eu não tenho nenhuma idéia do intérprete do ruby, mas o ruby ​​mri não faz memorização por padrão. Mas espero que ele faça esse tipo de otimização ao converter o código fonte em código de bytes.
Georg Schölly 16/05
8
É uma boa idéia extrair o valor 1.0 / 24.0 para uma variável para o princípio DRY. Outras partes do código também precisarão desse valor, portanto, você deve mantê-lo em um local central para evitar duplicação. Se o desempenho é um efeito colateral, então ótimo!
James Watkins
1
Você deve definitivamente extrair a constante, e definitivamente não fazê-lo com a razão "todo o desempenho que você pode obter"
Blake
4
Mas é uma divisão rápida, executada uma vez por quadro. Esperamos que a renderização do próprio quadro seja muitas magnitudes maiores em complexidade computacional. Este é um exemplo brilhante de otimização prematura.
101315 Alan H.
101

Passe flutuar para dormir, como sleep 0.1

VOCÊS
fonte