2011-02-12 54 views
15

是否有在Ruby中沒有更好的辦法睡覺,直到某些條件爲真?一覺睡到條件是紅寶石真正

loop do 
    sleep(1) 
    if ready_to_go 
    break 
    end 
end 
+0

通常情況下,這是做到這一點的常用方法。或者您可以使用任務調度例如cron等 – kurumi 2011-02-12 01:41:16

+2

有什麼不對這種做法?你擔心它是不斷地問:「我們到了沒?」等同,或者是你擔心它是冗長? – 2011-02-13 22:17:11

回答

22

until可以是一個語句修飾,從而導致:

sleep(1) until ready_to_go 

你必須使用一個線程與另一個線程改變ready_to_go否則你會掛起。

while (!ready_to_go) 
    sleep(1) 
end 

是類似的,但同樣,你需要一些東西來切換ready_to_go或者你會掛起。

你可以使用:

until (ready_to_go) 
    sleep(1) 
end 

但使用until一樣,我從來沒有去過舒服。其實我幾乎從不使用它,寧願相當於(!ready_to_go)

2

可以使用waitutil寶石作爲http://rubytools.github.io/waitutil/,例如描述

require 'waitutil' 

WaitUtil.wait_for_condition("my_event to happen", 
          :timeout_sec => 30, 
          :delay_sec => 0.5) do 
    check_if_my_event_happened 
end 
0
def sleep_until(time) 
    time.times do 
    break if block_given? && yield 
    sleep(1) 
    end 
end 

用法:

sleep_until(18){till_i_die}