X-Git-Url: http://gb7djk.dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FTimer.pm;h=e5ffa52424a1941e6d30979ee42b1b42eb1c51a1;hb=f6d0b05b25a61cb6d3aa671b7a8f5d4a69817b1c;hp=281421f08d72394b13c54912d97fbb476d3ae0ba;hpb=a6e52cc1680c2c30ef874e2e6c16d00c956624ee;p=spider.git diff --git a/perl/Timer.pm b/perl/Timer.pm index 281421f0..e5ffa524 100644 --- a/perl/Timer.pm +++ b/perl/Timer.pm @@ -3,29 +3,33 @@ # # This uses callbacks. BE CAREFUL!!!! # -# $Id$ +# # # Copyright (c) 2001 Dirk Koopman G1TLH # package Timer; -use vars qw(@timerchain $notimers); +use Mojo::IOLoop; + +use vars qw(@timerchain $notimers $lasttime); use DXDebug; @timerchain = (); $notimers = 0; +$lasttime = 0; + sub new { my ($pkg, $time, $proc, $recur) = @_; my $obj = ref($pkg); my $class = $obj || $pkg; - my $self = bless { t=>$time + time, proc=>$proc }, $class; + my $self = bless { t=>$time + $main::systime, proc=>$proc }, $class; $self->{interval} = $time if $recur; push @timerchain, $self; - $notimers++; - dbg('connll', "Timer created ($notimers)"); + $notimers = @timerchain; + dbg("Timer created (notimers: $notimers)") if isdbg('connll'); return $self; } @@ -34,12 +38,16 @@ sub del my $self = shift; delete $self->{proc}; @timerchain = grep {$_ != $self} @timerchain; + $notimers = @timerchain; + dbg("Timer deleted (notimers: $notimers)") if isdbg('connll'); } sub handler { - my $now = time; - + my $now = $main::systime; + + return unless $now != $lasttime; + # handle things on the timer chain my $t; foreach $t (@timerchain) { @@ -48,11 +56,12 @@ sub handler $t->{t} = $now + $t->{interval} if exists $t->{interval}; } } + + $lasttime = $now; } sub DESTROY { - dbg('connll', "timer destroyed ($Timer::notimers)"); - $Timer::notimers--; + dbg("timer destroyed ($Timer::notimers)") if isdbg('connll'); } 1;