The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Несколько 'таймеров'"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Perl)
Изначальное сообщение [ Отслеживать ]

"Несколько 'таймеров'"  +/
Сообщение от localhorst (ok) on 10-Май-11, 17:56 
Суть: нужно создать несколько (в идеале до бесконечности) "таймеров".
То есть я хочу, чтобы в рамках одного процесса разные функции вызывались с различными интервалами.
К примеру:
sub f1 {
print STDOUT "Func1\n";
}
sub f2 {
print STDOUT "Func2\n";
}
Чтобы, скажем, f1 вызывалась раз в 4 секунды, а f2 раз в 9 секунд.

Читал про Time::HiRes и setitimer в нем, но, кажется, оно меня не спасет.
Подскажите, плз.

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Несколько 'таймеров'"  +/
Сообщение от ACCA (ok) on 11-Май-11, 03:32 
>[оверквотинг удален]
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Несколько 'таймеров'"  +/
Сообщение от ACCA (ok) on 11-Май-11, 17:23 
Сделай что-нибудь в духе 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}};
        }
    }
}


Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру