我是Perl新手,在處理^ C腳本時遇到問題。當我在休眠期間收到^ C後試圖繼續執行腳本時,我只在$ FLAG = 2之前輸出;並沒有什麼後:代替多線程Perl腳本中的控制+ C處理
# perl test.pl
sleeping...
^Cawaiking... =
#
:
# perl test.pl
sleeping...
awaiking... ====
some..
#
它的接縫^ C是殺害進步黨條線程,它死沒有行動,但打印可以在主線程中執行後。有誰能幫我解決這個問題嗎?
$SIG{INT} = 'IGNORE';
our $FLAG : shared = 1;
...
sub call1{
$FLAG = 1;
my $pBar = threads->new(\&progressBarInit);
$pBar->detach;
print "sleeping...\n";
sleep 5;
print "awaiking...\n";
$FLAG = 2;
print "some..\n";
return @result;
}
call1();
sub progressBarInit{
my $max = 50;
my $counter = 1;
while($FLAG == 1){
progressBar($counter, $max, 50, '=');
$counter++;
if($counter > $max){$counter=1;}
sleep 1;
}
}
sub progressBar {
my ($counter, $max, $width, $char) = @_;
local $| = 1;
printf " %-${width}s\r", $char x (($width-1)*$counter/$max);
}
此代碼在Windows上工作正常。任何'^ C'被忽略。 – 2013-01-31 13:44:23
也許[這些警告](http://www.perlmonks.org/index.pl?node_id=718)可能會有所幫助,在'progressBar'中使用'syswrite'而不是'printf'? –
@ ring0,但信號處理程序不調用progressBar。我不明白它會如何應用。 – 2013-01-31 13:51:38