mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-05-04 22:19:38 +00:00
git-svn-id: https://svn.fhem.de/fhem/trunk/fhem@22299 2b470e98-0d58-463d-a4d8-8e2adae1ed80
70 lines
1.7 KiB
Perl
70 lines
1.7 KiB
Perl
# $Id$
|
|
package FHEM::Core::Timer::Helper;
|
|
use strict;
|
|
use warnings;
|
|
use utf8;
|
|
use Carp qw(croak carp);
|
|
use Time::HiRes;
|
|
|
|
use version; our $VERSION = qv('1.0.0');
|
|
my %LOT; # Hash for ListOfTimers
|
|
|
|
use Exporter qw(import);
|
|
|
|
our @EXPORT_OK = qw(addTimer removeTimer optimizeLOT);
|
|
|
|
sub addTimer {
|
|
my $defName = shift // carp 'No definition name' && return;
|
|
my $time = shift // carp q[No time specified] && return;
|
|
my $func = shift // carp q[No function specified] && return;
|
|
my $arg = shift // q{};
|
|
my $initFlag = shift // 0;
|
|
|
|
|
|
my %h = (
|
|
arg => $arg,
|
|
func => $func,
|
|
calltime => $time,
|
|
);
|
|
|
|
|
|
::InternalTimer($time, $func, $arg , $initFlag);
|
|
|
|
return push @{$LOT{$defName}} , \%h;
|
|
}
|
|
|
|
|
|
sub removeTimer {
|
|
my $defName = shift // carp q[No definition name];
|
|
my $func = shift // undef;
|
|
my $arg = shift // q{};
|
|
|
|
return 0 if ( !exists $LOT{$defName} );
|
|
|
|
my $numRemoved = 0;
|
|
for my $index (0 .. scalar @{$LOT{$defName}}-1 ) {
|
|
if ( ref $LOT{$defName}[$index] eq 'HASH' && exists $LOT{$defName}[$index]->{func}
|
|
&& (!defined $func || $LOT{$defName}[$index]->{func} == $func )
|
|
&& ( $arg eq q{} || $LOT{$defName}[$index]->{arg} eq $arg)
|
|
) {
|
|
::RemoveInternalTimer($LOT{$defName}[$index]->{arg},$LOT{$defName}[$index]->{func});
|
|
delete($LOT{$defName}[$index]);
|
|
$numRemoved++;
|
|
}
|
|
}
|
|
return $numRemoved;
|
|
}
|
|
|
|
|
|
sub optimizeLOT
|
|
{
|
|
my $defName = shift // carp q[No definition name];
|
|
return 0 if ( !exists $LOT{$defName} );
|
|
|
|
my $now= ::gettimeofday();
|
|
@{$LOT{$defName}} = grep { $_->{calltime} >= $now } @{$LOT{$defName}};
|
|
|
|
return scalar @{$LOT{$defName}};
|
|
}
|
|
|
|
1; |