Oh about the time being of in the folowing loop due to exec

    while (1)
        sleep (60*60)
        exec('program')
    end

that is indeed true ... however, dudes, am i the only programmer on this list ?? the 
solution is so simple i didnt thought i'd have to mention it, imagine the folowing

    $seconds_in_hour = 60 * 60; // 60 minutes * 60 seconds
    $run_time = 0;
    while (1) {
        sleep ($seconds_in_hour - $run_time);
        $run_time = time();
        exec('application');
        $run_time = time() - $run_time;
    }

In other words, the first time the loop triggers, run_time is 0, and in an hour the 
program runs.
when it runs the program, it takes the current time in seconds (seconds since epoch, 
1970)
after run is completed, it takes run_time = (time - run_time), in other words, how 
many seconds
did execution take. Then the next time the while loops it sleeps (seconds_in_hour - 
the time it took
to run the application), so it should trigger in an hour

This will still cause a 'drift', since a fraction of a second is gained/lost every 
time, since the measurement
used is seconds.. If this is a problem (in most cases it wont be, drifting a max of 23 
seconds a day?), then
you should recode the run_time calculation to use usleep and microtime, which would 
result in the folowing

    // microtime returns a string like "32423423 233", the first part is seconds
    // second is microseconds, function returns time as float (ie 1213324.333)
    function get_ms_time()
    {
        list($usec,$sec) = explode(" ",microtime());
        return ((float)$usec + (float)$sec);
    }

    $micro_seconds_in_hour = 60 * 60 * 1000; // 60 minutes * 60 seconds * 1000 Ms
    $run_time = 0;
    while (1) {
        usleep ($micro_seconds_in_hour - $micro_run_time);
        $run_time = (float)get_ms_time();
        exec('application');
        $run_time =  (float)get_ms_time() - (float)$run_time;
        $run_time = ceil($run_time * 1000);
    }


this loop does the same, but uses a float (integer with decimals) to calculate the run 
time, with a Mili Second accuracy. Then it converts the float (wich is something like 
'12.345') to Ms (12345) and does a usleep on that amount of Ms.

Hope this puts an end to this thread, this should give u plenty of tools to solve the 
problem
Thus endeth the lesson for today

    -- Chris

Chris Chabot wrote:

> No both time and sleep use seconds.
> see http://www.php.net/manual/en/function.sleep.php and 
>http://www.php.net/manual/en/function.time.php respectivly.
>
> if you want to use milliseconds, you need to use usleep
> see http://www.php.net/manual/en/function.usleep.php
>
> just nitpicking my last few awake moments of the day :)
>
>     -- Chris
>
> Steph wrote:
>
> > Seconds?  I thought milliseconds?
> >
> > Oh well, suck it and see, Josh!
> > ;)
> >
> > ----- Original Message -----
> > From: "Chris Chabot" <[EMAIL PROTECTED]>
> > To: "Josh Seward" <[EMAIL PROTECTED]>
> > Cc: <[EMAIL PROTECTED]>; "php-gtk" <[EMAIL PROTECTED]>
> > Sent: Saturday, March 31, 2001 4:31 AM
> > Subject: Re: [PHP-GTK] Time
> >
> > Umm the obvious reply would be to go to download.com and browse to see if they 
>have a shareware version of a cron like application, i am sure they do... i remember 
>seeing some of those.
> >
> > Otherwise, code a simple php or c or delphi or visual basic app that only does
> >
> > while (1)
> >     sleep(60*60);
> >     exec('application')
> > end
> >
> > Can't be that hard to write right? :)
> > or even if you wanted it -on- every hour and not every hour, just do a
> >     if  ( frac (time() / (60*60) ) == 0) {
> >         exec('application')
> >     }
> > (ie if the dividable time / 'seconds in hour' has no fraction (behind the . or , 
>depending on locality, its on the hour)
> >
> > I realy hope this wont become a windows support mailing list though, thats kinda 
>outside of the scope of php-gtk? :)
> >
> >     -- Chris
> >
> > Josh Seward wrote:
> >
> > > Hello,
> > >
> > > Is there a way to have php run a script at a certain time? What I really need is 
>something like cron on unix systems. I would use windows scheduler but it only goes 
>by days. I ned to run this once every hour.
> > >
> > > P.S. To let everyone how helped me before. I can now send commands to an outside 
>program I am running w/ the fsockopen command. This is after I open the prog. with 
>popen. Thank you all for your help., especially Steph and Micheal. Your efffort and 
>advice is much appriciated. If your ever in Athens Ohio the first round is on me :-)
> >
> > --
> > PHP GTK Mailing List (http://www.php.net/)
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> > To contact the list administrators, e-mail: [EMAIL PROTECTED]
>
> --
> PHP GTK Mailing List (http://www.php.net/)
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> To contact the list administrators, e-mail: [EMAIL PROTECTED]


-- 
PHP Windows Mailing List (http://www.php.net/)
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]

Reply via email to