Как повторять что-то каждые 4 минуты в бесконечном цикле

У меня есть сценарий, который использует while(true) для запуска, поэтому он работает вечно до тех пор, пока он не умрет. Я хочу, чтобы он мог что-то повторять раз в 4 минуты, как я могу это сделать? Скрипт запускается в командной строке, и он использует while(true) поэтому его запутанный плюс я не уверен, как заставить его делать это каждые 4 минуты. Как я могу заставить его повторять что-то раз в 4 минуты, пока все еще while(true) ?

Related of "Как повторять что-то каждые 4 минуты в бесконечном цикле"

Можешь попробовать

 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, она работает для меня идеально.