I have a script that uses while(true) to run so it runs forever until it dies. I want to be able to make it echo something once every 4 minutes, how can i do this? The script runs on command prompt and it uses while(true) so its confusing plus i am not sure how to make it do that every 4 minutes.
How can i make it echo something once every 4 minutes while still in a while(true)?
Asked
Active
Viewed 2.5k times
7
Peter O.
- 30,765
- 14
- 76
- 91
Matt Jenkins
- 81
- 1
- 1
- 2
-
maybe sleep or delay function – rsz Oct 13 '12 at 22:45
-
1Are you trying to spawn a server process to do some work from PHP or is this a local script that you are executing? – jheddings Oct 13 '12 at 22:51
3 Answers
7
You can try
while(true)
{
sleep(240); // sleep for 240 sec
echo " Hello World" ;
}
Or
$time = time();
while ( true ) {
/*
* Play Some Ball
*/
if ((time() - $time) >= 240) {
echo date("Y:m:d g:i:s"), PHP_EOL;
$time = time();
}
sleep(2);
}
Output Test with 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
Baba
- 92,047
- 28
- 163
- 215
-
2
-
2I would always recommend a small sleep on a tight loop that will run forever. That or some other yielding method to avoid an all-consuming loop. – jheddings Oct 13 '12 at 22:55
-
-
-
1yup small sleep to give job scheduler a change using something like usleep. – Alfred Oct 13 '12 at 23:13
3
Using a sleep method will actually halt your script from running. I'm not 100% if this is what you want to happen.
Another way to attack this issue would be to compare timestamps from the last "echo" command on each iteration.
$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.
}
This will allow your code within your loop to continue running and only check the times at the start of each iteration.
Lix
- 46,307
- 10
- 97
- 126
-
In php7 `echo "$interval seconds have passed..."; ` should be: `echo $interval . "seconds have passed...";` Or: `echo $interval . 'seconds have passed...'; // single quot is faster than double quot` – jagb Mar 04 '17 at 18:10
1
Try adding in a loop of while(true) { ... } sleep() parameter function.
$sleep = 4*60;
while(true)
{
# waiting...
sleep($sleep);
# work after 240 mins
}
Marin Sagovac
- 3,867
- 5
- 22
- 52