Voting

: seven plus zero?
(Example: nine)

The Note You're Voting On

smcbride at msn dot com
5 years ago
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);
}

?>

<< Back to user notes page

To Top