У меня есть сценарий, который использует while(true)
для запуска, поэтому он работает вечно до тех пор, пока он не умрет. Я хочу, чтобы он мог что-то повторять раз в 4 минуты, как я могу это сделать? Скрипт запускается в командной строке, и он использует while(true)
поэтому его запутанный плюс я не уверен, как заставить его делать это каждые 4 минуты. Как я могу заставить его повторять что-то раз в 4 минуты, пока все еще while(true)
?
Можешь попробовать
while(true) { sleep(240); // sleep for 240 sec echo " Hello World" ; }
вwhile(true) { sleep(240); // sleep for 240 sec echo " Hello World" ; }
Или
$time = time(); while ( true ) { /* * Play Some Ball */ if ((time() - $time) >= 240) { echo date("Y:m:dg:i:s"), PHP_EOL; $time = time(); } sleep(2); }
Тест выхода с Time = 2 sec, Sleep = 1 sec
2012:10:14 12:50:56 2012:10:14 12:50:58 2012:10:14 12:51:00 2012:10:14 12:51:02 2012:10:14 12:51:04 2012:10:14 12:51:06 2012:10:14 12:51:08 2012:10:14 12:51:10 2012:10:14 12:51:12 2012:10:14 12:51:14
Использование метода сна фактически остановит запуск вашего сценария. Я не 100%, если это то, что вы хотите.
Другой способ атаковать эту проблему – сравнить метки времени с последней командой «эхо» на каждой итерации.
$echo_time = time(); $interval = 4*60; while(true){ if ($echo_time + $interval >= time()){ echo "$interval seconds have passed..."; $echo_time = time(); // set up timestamp for next interval } // other uninterrupted code goes here. }
в$echo_time = time(); $interval = 4*60; while(true){ if ($echo_time + $interval >= time()){ echo "$interval seconds have passed..."; $echo_time = time(); // set up timestamp for next interval } // other uninterrupted code goes here. }
Это позволит вашему коду в вашем цикле продолжать работу и проверять время только в начале каждой итерации.
Попробуйте добавить в цикл значение while(true) { ... }
sleep ().
$sleep = 4*60; while(true) { # waiting... sleep($sleep); # work after 240 mins }
в$sleep = 4*60; while(true) { # waiting... sleep($sleep); # work after 240 mins }
Немного грубого рытья, но в зависимости от ситуации, в основном вы не можете использовать функцию sleep
. Что делать, если вы хотите, чтобы ваш скрипт работал каждую минуту, но он выполняется в течение 5 секунд? Если вы забудете 55 секунд, потому что время выполнения составляет 5 секунд, это сработает, НО, если он заработает через 4 секунды, ваш таймер будет сломан.
Из-за этого я предлагаю использовать идею Lix, она работает для меня идеально.