note 125934 added to function.sleep
| From: | smcbride at msn dot com | Date: | Mon, 15 Mar 2021 20:55:40 +0000 |
| Subject: | note 125934 added to function.sleep | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-219332@lists.php.net to get a copy of this message | ||
An example of using sleep to run a set of functions at different intervals. This is not a
replacement for multi-threading, but it could help someone that wants to do something cheap. You
don't have to use eval(). It is just used as an example. This is different than running a
standard 1 second sleep loop, due to sleeping longer does not consume as much CPU.
<?php
// current time
echo date('h:i:s') . "\n";
// Some example functions
function function_a() { echo 'function_a called @ ' . date('h:i:s') . PHP_EOL; }
function function_b() { echo 'function_b called @ ' . date('h:i:s') . PHP_EOL; }
function function_c() { echo 'function_c called @ ' . date('h:i:s') . PHP_EOL; }
// Add some timers (in seconds) with function calls
$sleeptimers = array();
$sleeptimers['5'][0]['func'] = 'function_a();';
$sleeptimers['10'][0]['func'] = 'function_b();';
$sleeptimers['15'][0]['func'] = 'function_c();';
// Process the timers
while(true) {
$currenttime = time();
reset($sleeptimers);
$mintime = key($sleeptimers);
foreach($sleeptimers as $SleepTime => $Jobs) {
foreach($Jobs as $JobIndex => $JobDetail) {
if(!isset($JobDetail['lastrun'])) {
$sleeptimers[$SleepTime][$JobIndex]['lastrun'] = time();
if($SleepTime < $mintime) $mintime = $SleepTime;
} elseif(($currenttime - $JobDetail['lastrun']) >= $SleepTime) {
eval($JobDetail['func']);
$lastrun = time();
$sleeptimers[$SleepTime][$JobIndex]['lastrun'] = $lastrun;
$mysleeptime = $SleepTime - ($currenttime - $lastrun);
if($mysleeptime < 0) $mysleeptime = 0;
if(($currenttime - $JobDetail['lastrun']) < $mintime) $mintime = $mysleeptime; //
account for length of time function runs
echo 'Sleep time for function ' . $JobDetail['func'] . ' = ' .
$mysleeptime . PHP_EOL;
}
}
}
echo 'Sleeping for ' . $mintime . ' seconds' . PHP_EOL;
sleep($mintime);
}
?>
----
Server IP: 45.112.84.4
Probable Submitter: 45.112.85.246 (proxied: 107.77.213.65)
----
Manual Page -- http://php.net/manual/en/function.sleep.php
Edit -- https://master.php.net/note/edit/125934
Del: integrated -- https://master.php.net/note/delete/125934/integrated
Del: useless -- https://master.php.net/note/delete/125934/useless
Del: bad code -- https://master.php.net/note/delete/125934/bad+code
Del: spam -- https://master.php.net/note/delete/125934/spam
Del: non-english -- https://master.php.net/note/delete/125934/non-english
Del: in docs -- https://master.php.net/note/delete/125934/in+docs
Del: other reasons-- https://master.php.net/note/delete/125934
Reject -- https://master.php.net/note/reject/125934
Search -- https://master.php.net/manage/user-notes.php