как произвести задержку в рубине - PullRequest
9 голосов
/ 21 июня 2010

Как произвести задержку в рубине?

Я использовал утверждение сна, но оно не дало мне того, что я хочу.

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

Я хочу, чтобы он сначала напечатал amit, затем задержку в 10 секунд, затем напечатал scj.

Но в приведенном выше случае произойдет пауза на 10 секунд, а затем будет напечатано amit и scj вместе. Я этого не хочу.

Надеюсь, ты понял, что я хочу сказать.

Ответы [ 2 ]

9 голосов
/ 21 июня 2010

Я не могу воспроизвести это.С консоли это делает именно то, что вы ожидаете:

puts "amit"
sleep 10
puts "scj"

(Ruby 1.8.6 в Linux)

Можете ли вы привести аналогичный короткий, но полный пример, который 't делать то, что вы хотите - или объяснить свой контекст более подробно?

Если вы пишете веб-приложение, то браузер вполне может видеть любые данные только после того, как весь ответ написан - это будетобъясни, что ты видишь.Если это так, вам понадобится другой подход, который позволил бы сначала написать первоначальный ответ, а затем заставить браузер сделать еще один запрос.Задержка может быть на сервере или на клиенте, в зависимости от сценария.

8 голосов
/ 21 июня 2010

Звоните $stdout.flush перед вызовом спать.Выходные данные, вероятно, буферизуются (хотя обычно выходные данные являются только строковыми буферизированными, поэтому puts, который производит перевод строки, должен работать без очистки, но, очевидно, это не так для вашего терминала).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...