Суть: нужно создать несколько (в идеале до бесконечности) "таймеров".
То есть я хочу, чтобы в рамках одного процесса разные функции вызывались с различными интервалами.
К примеру:
sub f1 {
print STDOUT "Func1\n";
}
sub f2 {
print STDOUT "Func2\n";
}
Чтобы, скажем, f1 вызывалась раз в 4 секунды, а f2 раз в 9 секунд.Читал про Time::HiRes и setitimer в нем, но, кажется, оно меня не спасет.
Подскажите, плз.
>[оверквотинг удален]
Сделай что-нибудь в духе Discrete Event Simulation:
my $time = 0;
sub func1{ print "func1: $time\n"; }
sub func2{ print "func2: $time\n"; }my %sch = (
ev1 => { INT => 4, C => 4, DO => \&func1 },
ev2 => { INT => 9, C => 9, DO => \&func2 }
);while (1) {
my $ntime = LONG_MAX;
foreach my $k (keys %sch) {
$ntime = $sch{$k}{C} if ($ntime> $sch{$k}{C});
}
sleep($ntime-$time);
$time = $ntime;
foreach my $k (keys %sch) {
if ($sch{$k}{C} <= $time) {
$sch{$k}{C} += $sch{$k}{INT};
&{$sch{$k}{DO}};
}
}
}