summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2011-05-30 19:30:13 +0000
committerPaul Buetow <paul@buetow.org>2011-05-30 19:30:13 +0000
commit7940ed0177b210526662c698cadef26913ba0ed6 (patch)
tree4a2191523db0e1a0742f65665f16b1063877fc6f
parentb7189bab044a37877012846ef0b17b08032e7e89 (diff)
Time::HiRes job scheduling support
-rw-r--r--CHANGELOG3
-rw-r--r--lib/PerlDaemon/PerlDaemon.pl18
2 files changed, 16 insertions, 5 deletions
diff --git a/CHANGELOG b/CHANGELOG
index 02116db..cf89f4e 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,4 +1,5 @@
-Mo 30. Mai 21:10:53 CEST 2011
+Mo 30. Mai 21:29:20 CEST 2011
+* Implemented Time::HiRes job scheduling
* Added passing of startup options. E.g.
./control start daemon.daemonize=no daemon.loopinterval=10
starts perldaemon in foreground w/ a loopinterval of 10 seconds.
diff --git a/lib/PerlDaemon/PerlDaemon.pl b/lib/PerlDaemon/PerlDaemon.pl
index 58e9755..15c29a4 100644
--- a/lib/PerlDaemon/PerlDaemon.pl
+++ b/lib/PerlDaemon/PerlDaemon.pl
@@ -7,6 +7,7 @@ use warnings;
use Shell qw(mv);
use POSIX qw(setsid strftime);
+use Time::HiRes qw(gettimeofday tv_interval);
use PerlDaemon::Logger;
use PerlDaemon::RunModules;
@@ -148,10 +149,19 @@ sub daemonloop ($) {
my $loopinterval = $conf->{'daemon.loopinterval'};
my $loop = shift;
- for (my $i = 1;;++$i) {
- $rmodule->do();
- sleep $loopinterval;
- alive $conf;
+ my $lastrun = [0,0];
+
+ for (;;) {
+ my $now = [gettimeofday];
+ my $timediff = tv_interval($lastrun, $now);
+
+ if ($timediff >= $loopinterval) {
+ $lastrun = $now;
+ $rmodule->do();
+ alive $conf;
+ }
+
+ sleep $loopinterval / 10;
}
}