2010-06-21 97 views
8

如何在ruby中產生延遲?如何在ruby中產生延遲

我用睡眠聲明,但它並沒有給我我想要的。

puts "amit" 
sleep(10) 
puts "scj" 

我希望它先打印阿米特,然後延遲10秒,然後打印scj。

但是在上面的情況下會發生什麼,它會暫停10秒,然後它會一起打印amit和scj。我不想那樣。

我希望你有我想說的。

+2

你在哪裏運行腳本?嘗試從命令行運行而不是通過SciTE或其他編輯器。 – Beanish 2010-06-21 13:08:34

+1

如果我輸入'puts'bla';睡眠(10);在irb中放置'...並繼續!',它只是工作。請更多地解釋你的背景是什麼。平臺,紅寶石版本,也許是一個小例子... – nathanvda 2010-06-21 13:29:58

回答

8

致電$stdout.flush致電入睡前。輸出可能被緩衝(雖然通常輸出只是行緩衝,所以puts,它產生一個換行符,應該沒有沖洗,但顯然這不適用於您的終端)。

+0

ndlzz讓我知道你的實例你給了 以上放'布'睡眠(10),然後這是什麼,這continue1 ?? – 2010-06-22 05:44:41

6

我不能重現這一點。從一個控制檯,這不正是你所期望:

puts "amit" 
sleep 10 
puts "scj" 

(在Linux上的Ruby 1.8.6)

你可以提供一個類似的短但完整的例子做你想要 - 或更多地解釋你的情況?

如果您正在編寫一個Web應用程序,那麼瀏覽器可能只會在整個響應寫完後纔看到任何數據 - 這將解釋您所看到的內容。如果是這樣的話,你需要一種不同的方法來讓最初的響應被寫入,然後讓瀏覽器發出另一個請求。延遲可能在服務器或客戶端,視情況而定。

+0

actully jon我想要的是簡單的我想獲得兩個這兩個語句之間的延遲,但使用睡眠程序執行從睡眠語句本身開始發生什麼,我不想我想要執行流程從put「amit」開始,然後我想要10秒延遲和最後的聲明......這就是我想要的 – 2010-06-21 11:59:41