in reply to Doing every X seconds
use Time::HiRes qw( sleep ); my $interval = 3; my $min_sleep = 0; my $sleep_until = time; while (1) { work(); $sleep_until += $interval; my $now = time; my $sleep_for = $sleep_until - $now; if ($sleep_for < $min_sleep) { warn("Work took too long\n"); $sleep_for = $min_sleep; $sleep_until = $now + $sleep_for; } sleep($sleep_for) if $sleep_for; }
|
---|