diff options
| author | Paul Buetow <paul@buetow.org> | 2011-06-06 07:04:43 +0000 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2011-06-06 07:04:43 +0000 |
| commit | 2bcd3cd68643c258aeeec47dbbdfeff57e3a218e (patch) | |
| tree | d1253ca5055311740bdd199af33a8b4de43462a9 | |
| parent | 71ecf34125b5c9b29bf28e490040bef45b119694 (diff) | |
Initial correct handling of time carryings
| -rw-r--r-- | CHANGELOG | 4 | ||||
| -rw-r--r-- | WHISHLIST | 1 | ||||
| -rw-r--r-- | lib/PerlDaemon/RunModules.pm | 18 |
3 files changed, 16 insertions, 7 deletions
@@ -1,3 +1,7 @@ +Mo 6. Jun 09:03:57 CEST 2011 +* Added './control foreground' startup option +* Added correct time carrying + Do 2. Jun 11:09:25 CEST 2011 * Added module load error handling @@ -1,3 +1,2 @@ * Add documentation -* Add carry handling (sum it up) * Add special SIGNAL handling (e.g. trigger modules) diff --git a/lib/PerlDaemon/RunModules.pm b/lib/PerlDaemon/RunModules.pm index 95bb577..5aa9f9a 100644 --- a/lib/PerlDaemon/RunModules.pm +++ b/lib/PerlDaemon/RunModules.pm @@ -2,6 +2,8 @@ package PerlDaemon::RunModules; +use strict; +use warnings; use Time::HiRes qw(gettimeofday tv_interval); sub new ($$) { @@ -33,6 +35,8 @@ sub new ($$) { } else { $loadedmodules{$name} = $module; $scheduler{$name}{lastrun} = [0,0]; + $scheduler{$name}{carrysum} = 0; + $scheduler{$name}{firstloop} = 1; $scheduler{$name}{interval} = $conf->{'daemon.modules.runinterval'}; $logger->logmsg("Created module instance $name"); } @@ -63,14 +67,17 @@ sub do ($) { my $now = [gettimeofday]; my $timediff = tv_interval($scheduler->{$k}{lastrun}, $now); my $interval = $scheduler->{$k}{interval}; + my $carrytimediff = $timediff + $scheduler->{$k}{carrysum}; - if ($timediff >= $interval) { - my $carry = $timediff - $interval; + if ($carrytimediff >= $interval) { + my $carry = $carrytimediff - $interval; $logger->logmsg("Triggering $k (last triggered before ${timediff}s; carry: ${carry}s; wanted interval: ${interval}s)"); - # TODO: carry handling - #if ($firstloop == 0) { - #} + if ($scheduler->{$k}{firstloop} == 0) { + $scheduler->{$k}{carrysum} = $carry; + } else { + $scheduler->{$k}{firstloop} = 0; + } $scheduler->{$k}{lastrun} = $now; $v->do(); @@ -78,7 +85,6 @@ sub do ($) { } } - $firstloop = 0; } } |
