¿Hay alguna manera mejor en Ruby para dormir hasta que alguna condición sea cierta?duerme hasta que la condición sea verdadera en ruby
loop do
sleep(1)
if ready_to_go
break
end
end
¿Hay alguna manera mejor en Ruby para dormir hasta que alguna condición sea cierta?duerme hasta que la condición sea verdadera en ruby
loop do
sleep(1)
if ready_to_go
break
end
end
until
puede ser un modificador de la declaración, que conduce a:
sleep(1) until ready_to_go
Vas a tener que utilizar que en un hilo con otro hilo cambiar ready_to_go
lo contrario va a colgar.
while (!ready_to_go)
sleep(1)
end
es similar a pero, de nuevo, necesitas hacer algo para cambiar ready_to_go
o si debe colgar.
que puede usar:
until (ready_to_go)
sleep(1)
end
pero nunca he sentido cómodo usando until
así. En realidad, casi nunca lo uso, prefiero el equivalente (!ready_to_go)
.
Estaba usando erróneamente "sleep until ready_to_go". Gracias. – ccy
Simplemente debes tener cuidado con las condiciones que nunca pueden dar como resultado una declaración verdadera o terminarás en un agujero negro. Aprendí esa lección cuando estaba escribiendo el lenguaje ensamblador y C, y encerré mi máquina tan mal que tuve que tirar del cable de alimentación para que volviera a mi control. Varias veces. Suspiro. :-) –
¿Querías decir 'menos' o' hasta '? (Ambos son negativos, y ambos comienzan con "un") –
Puede usar la gema waitutil
como se describe en http://rubytools.github.io/waitutil/, p. Ej.
require 'waitutil'
WaitUtil.wait_for_condition("my_event to happen",
:timeout_sec => 30,
:delay_sec => 0.5) do
check_if_my_event_happened
end
def sleep_until(time)
time.times do
break if block_given? && yield
sleep(1)
end
end
Uso:
sleep_until(18){till_i_die}
por lo general, esa es la forma común de hacerlo. o puede usar el programador de tareas como cron etc. – kurumi
¿Qué hay de malo en este enfoque? ¿Le preocupa que sea el equivalente a preguntar constantemente "¿Ya llegamos?", O ¿le preocupa que sea detallado? –