Normalde 1 saniye sürecek bir alt yordam var. Bazen, sonsuz olarak çalışabilir. Alt yordam çok uzun sürüyorsa (> 10 saniye) kodda devam etmek istiyorum ve bu alt yordamın çalışmasını görmezden geliyorum. Şimdiye kadar alarmı kullanıyorum.Perl alt yordam zaman aşımı
use Win32::OLE;
eval {
local $SIG{ALRM} = sub { die "alarm\n" };
alarm 10; # schedule alarm in 10 seconds
&do_the_subroutine;
alarm 0; # cancel the alarm
};
if ([email protected]) {
$error_string .= $script;
#Do something else if the subroutine took too long.
}
do_the_subroutine{
# use existing instance if Excel is already running
eval {$ex = Win32::OLE->GetActiveObject('Excel.Application')};
die "Excel not installed" if [email protected];
unless (defined $ex) {
$ex = Win32::OLE->new('Excel.Application', sub {$_[0]->Quit;})
or die "Oops, cannot start Excel";
}
# get a new workbook
$book = $ex->Workbooks->Add;
# write to a particular cell
$sheet = $book->Worksheets(1);
$sheet->Cells(1,1)->{Value} = "foo";
# write a 2 rows by 3 columns range
$sheet->Range("A8:C9")->{Value} = [[ undef, 'Xyzzy', 'Plugh' ],
[ 42, 'Perl', 3.1415 ]];
# print "XyzzyPerl"
$array = $sheet->Range("A8:C9")->{Value};
for (@$array) {
for (@$_) {
print defined($_) ? "$_|" : "<undef>|";
}
print "\n";
}
# save and exit
$book->SaveAs('test.xls');
undef $book;
undef $ex;
}
& do_the_subroutine yüzden geçebilirim değilim asla geri gelmez. Bu kod bloğunu da bu alt programın içine koyamıyorum. Düşüncesi olan var mı?
Alt programın kodunu paylaşabilir misiniz? Benim için iyi çalışıyor, bu demo bakın: http://ideone.com/KycD4S –
Bu davranışı yeniden yaratamam, aynı kodu kullanarak alarmın çıktığını görüyorum. Burada görmediğimiz daha fazla kod var mı? 'Do_the_subroutine' tanımını gösterebilir misin? –
Merhaba, tanımı ekledim. – ansario