Как произвести задержку рубина?
Я использовал оператор сна, но он не дал мне, что я хочу.
puts "amit"
sleep(10)
puts "scj"
Я хочу, чтобы это сначала распечатало amit, затем задержка 10 секунд, затем распечатало scj.
Но в вышеупомянутом случае, что происходит, это, приостановится в течение 10 секунд, и затем это распечатает amit и scj вместе. Я не хочу это.
Я надеюсь, что Вы получили то, что я хочу сказать.
Я не могу воспроизвести это. С консоли это делает именно то, что вы ожидаете:
puts "amit"
sleep 10
puts "scj"
(Ruby 1.8.6 в Linux)
Можете ли вы предоставить аналогичный короткий, но полный пример, который не делает то, что вы хотите - или более подробно объясните свой контекст?
Если вы пишете веб-приложение, тогда браузер может видеть какие-либо данные только после того, как будет написан весь ответ - это объяснило бы то, что вы видите. В этом случае вам понадобится другой подход, который позволит сначала написать первоначальный ответ, а затем заставить браузер сделать еще один запрос. Задержка может быть на сервере или на клиенте, в зависимости от сценария.
Вызовите $stdout.flush
перед вызовом sleep. Вероятно, вывод буферизован (хотя обычно вывод буферизован только по строкам, поэтому puts
, который выдает новую строку, должен работать без промывки, но, видимо, для вашего терминала это не так).