Позвольте мне объяснить задачу с примером кода:
#!/usr/bin/perl
use strict;
use warnings;
my $t = 3;
eval {
local $SIG{ALRM} = sub { die "alarm\n" }; # NB: \n required
print "Start $t\n";
alarm(10);
sleep($t); # instead of this I have some data that collect code
alarm(0);
print "done with $t\n";
};
if ($@) {
die unless $@ eq "alarm\n";
print "timeout\n";
}
Вместо sleep
у меня есть код, который отправляет данные в массив. Массив будет гарантированно заполнен необходимыми данными в течение `x секунд.
Вопрос: как распечатать массив после x
секунды, без использования sleep
(неблокирующий способ)?
Насколько я понимаю, самый простой способ установить таймер в perl - это использовать $SIG{ALRM}
. Но что делать, если мне не нужен таймер (я не могу использовать sleep
), мне просто нужно установить одно прерывание, которое должно запускаться через предварительно определенное количество секунд? Может быть, я должен использовать SIGINT
для этой задачи?
Любая помощь приветствуется.