Search code examples
ruby

sleep until condition is true in ruby


Is there any better way in Ruby to sleep until some condition is true ?

loop do 
  sleep(1)
  if ready_to_go
    break
  end
end

Solution

  • until can be a statement modifier, leading to:

    sleep(1) until ready_to_go
    

    You'll have to use that in a thread with another thread changing ready_to_go otherwise you'll hang.

    while (!ready_to_go)
      sleep(1)
    end
    

    is similar to that but, again, you'd need something to toggle ready_to_go or you'd hang.

    You could use:

    until (ready_to_go)
      sleep(1)
    end
    

    but I've never been comfortable using until like that. Actually I almost never use it, preferring the equivalent (!ready_to_go).