Я пытаюсь проверить огонь каждую секунду в течение 30 секунд. Я еще не нашел четкого способа сделать это с Ruby. Пытаясь что-то вроде этого в настоящее время:Выполните цикл для определенного интервала времени или при выполнении условия
until counter == 30
sleep 1
if condition
do something
break
else
counter +=1
end
Проблема с чем-то вроде, что он должен использовать сон, который останавливает поток в своих треках на целую секунду. Есть ли другой способ добиться чего-то подобного выше, без использования сна? Есть ли способ иметь что-то цикл, хотя на временной интервал?
Избавьтесь от переменной счетчика и используйте либо 'for i в 1..30', либо' 1.upto (30) 'или' (1..30) .each'. – meagar
Что вы надеетесь сделать с потоком во время ожидания? Возможно, вы захотите проверить что-то вроде [IO # select] (http://www.ruby-doc.org/core-1.9.3/IO.html#method-c-select), если вы пытаетесь проверить IO и сделать что-то еще, если его там нет. Из вашего кода неясно, есть ли какая-либо другая обработка. Ничего из того, что сон не имеет ничего общего. –
Извините за туманность в вопросе. Я запускаю бот, основанный на событиях, который управляется событиями/многопоточными. Я хотел проверить, происходит ли условие в течение 30 секунд окна события, вызвавшего цикл. Я хотел делать чек довольно часто (1 секунда или os интервалы) в течение этих 30 секунд. Условие обновляется/происходит в другом событии, и я хочу, чтобы этот цикл проверял и выполнял реакцию на основе этого условия, возникающего/не возникающего. –