Я играл с этим кодом, начиная с того, как звучит звуковой сигнал, как только программа запускается, он не останавливается. Я подозреваю, что проблема связана с $thread->kill('KILL')->detach;
.Perl thread kill не работает
Любые идеи? Или я сделал что-то не так?
#!c:/perl/bin/perl
use threads;
use Audio::Beep;
my $thread;
my $playing=0;
while (1) {
my $val = int(rand(10));
print "$val\n";
# if event "start" occurs and is not playing create thread
#if (($val==0 || $val==1 || $val==2 || $val==3 || $val==4) && (!$playing)) {
if (($val==0 || $val==1 || $val==2) && (!$playing) ) {
$playing = 1;
$thread = threads->create(
sub {
local $SIG{'KILL'} = sub { threads->exit() };
print "start beep\n";
beep(520, 10000);
}
);
}
# if event "end" occurs and playing wait 1 seconf and kill thread
elsif (($val==5) && $playing) {
print "stop beep \n";
#sleep(1);
$playing = 0;
$thread->kill('KILL')->detach;
}
#sleep(1);
$count = 0;
for($i=0; $i<99999 ; $i++) {
$count++;
}
}
установить звуковой сигнал и попробовать сценарий. он не останавливается ... вы можете заставить скрипт работать медленнее, дублируя цикл for 99999 ниже. раньше он работал очень медленно, и он все равно не останавливался. –
Ваш бесконечный взгляд имеет 30% -ный шанс нанести 10-секундный звуковой сигнал и только 10% -ный шанс на попытку убить этот звуковой сигнал. Откуда вы знаете, что убийство не работает, а затем новый звуковой сигнал просто порожден? Если вы разместите печать внутри вашего обработчика SIG {KILL}, вызвана ли она? – pilcrow