#
# This uses callbacks. BE CAREFUL!!!!
#
-# $Id$
+#
#
# Copyright (c) 2001 Dirk Koopman G1TLH
#
package Timer;
-use vars qw(@timerchain $notimers);
+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;
}
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
- for (@timerchain) {
- if ($now >= $_->{t}) {
- &{$_->{proc}}();
- $_->{t} = $now + $_->{interval} if exists $_->{interval};
+ my $t;
+ foreach $t (@timerchain) {
+ if ($now >= $t->{t}) {
+ &{$t->{proc}}();
+ $t->{t} = $now + $t->{interval} if exists $t->{interval};
}
}
+
+ $lasttime = $now;
}
sub DESTROY
{
- dbg('connll', "Timer destroyed ($notimers)");
- $notimers--;
+ dbg("timer destroyed ($Timer::notimers)") if isdbg('connll');
}
1;