Beefy Boxes and Bandwidth Generously Provided by pair Networks
There's more than one way to do things
 
PerlMonks  

Re: display stuff based on systemclock

by ikegami (Patriarch)
on Jul 09, 2009 at 15:55 UTC ( [id://778612]=note: print w/replies, xml ) Need Help??


in reply to display stuff based on systemclock

Something like this?

my @mesages = (...); my $pass = 0; for my $message (@messages) { sleep(5) if !$pass++; print($message); }

sleep is interruptible and drift can occur if the loop body is non-trivial, so maybe the following would be better:

use Time::HiRes qw( time sleep ); # Optional sub sleep_until { my ($e_time) = @_; for (;;) { my $dur = $e_time - time; last if $dur <= 0; sleep($dur); } } my @mesages = (...); my $s_time = time; for my $i (@messages) { sleep_until($s_time + 5*$i); print($message); }

Replies are listed 'Best First'.
Re^2: display stuff based on systemclock
by Wire64 (Initiate) on Jul 09, 2009 at 16:05 UTC
    no i dont want it to use sleep, i want the program to exit after displaying the message.
    So when i execute the program at 7:05:02 i get a message and if i execute the program at 7:05:06 i get the next message. Should have explained that sorry. and i dont want to write to disk either.
      Forgetting we're dealing with times for a second, that's usually done using by subtracting the remainder of a division by your slot size.
      $ perl -e'printf "%-3s %2d\n", "$_:", $_ - ($_ % 5) for 0..19' 0: 0 1: 0 2: 0 3: 0 4: 0 5: 5 6: 5 7: 5 8: 5 9: 5 10: 10 11: 10 12: 10 13: 10 14: 10 15: 15 16: 15 17: 15 18: 15 19: 15

      The same trick can be applied to times.

      $ perl -MPOSIX -le'@lt = localtime; $lt[0] -= $lt[0] % 5; print strfti +me "%Y-%m-%dT%H:%M:%S", @lt' 2009-07-09T12:14:40 $ perl -MPOSIX -le'@lt = localtime; $lt[0] -= $lt[0] % 5; print strfti +me "%Y-%m-%dT%H:%M:%S", @lt' 2009-07-09T12:14:40 $ perl -MPOSIX -le'@lt = localtime; $lt[0] -= $lt[0] % 5; print strfti +me "%Y-%m-%dT%H:%M:%S", @lt' 2009-07-09T12:14:45 $ perl -MPOSIX -le'@lt = localtime; $lt[0] -= $lt[0] % 5; print strfti +me "%Y-%m-%dT%H:%M:%S", @lt' 2009-07-09T12:14:45

      The question is what do you want to happen if 60 isn't divisible by $delay?

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://778612]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others having an uproarious good time at the Monastery: (3)
As of 2024-03-28 13:57 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found