Я пишу многопоточное средство проверки работоспособности веб-сайта на Perl, и вот основной код (включает только многопоточную часть):
#!/usr/bin/perl
use LWP::UserAgent;
use Getopt::Std;
use threads;
use threads::shared;
my $maxthreads :shared = 50;
my $threads :shared = 0;
print "Website Uptime Checker\n";
my $infilename = $ARGV[0];
chomp($infilename);
open(INFILE, $infilename);
my $outfilename = $ARGV[1];
chomp($outfilename);
open(OUTFILE, ">" . $outfilename);
OUTFILE->autoflush(1);
while ($site = <INFILE>)
{
chomp($site);
while (1)
{
if ($threads < $maxthreads)
{
$threads++;
my $thr = threads->create(\&check_site, $site);
$thr->detach();
last;
}
else
{
sleep(1);
}
}
}
while ($threads > 0)
{
sleep(1);
}
sub check_site
{
$server = $_[0];
print "$server\n";
$threads--;
}
Через некоторое время выдает ошибку:
Не удается вызвать метод «detach» для неопределенного значения в C: \ perl \ webchecker.pl, строка 28, строка 245.
Что вызывает эту ошибку?Я знаю, что это в отсоединении, но что я делаю не так в моем коде?Windows показывает много свободной памяти, поэтому это не должен быть компьютер, на котором не хватает памяти, эта ошибка возникает, даже если я установил $ maxthreads равным 10 или, возможно, даже ниже.