我用Perl語言編寫一個多線程的網站的正常運行檢查,和這裏的基本代碼到目前爲止(僅包括螺紋部):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--;
}
它一段時間後,給出了一個錯誤:
不能調用位於C未定義值的方法 「分離」:\ Perl的\ webchecker.pl線28,線245
是什麼原因導致這個錯誤?我知道這是在分離,但我在代碼中做錯了什麼? Windows顯示大量可用內存,因此它不應該是計算機內存不足,即使將$ maxthreads設置爲10或甚至更低,也會發生此錯誤。
對不起,但本網站轉換#!/ usr/bin/perl to!/ usr/bin/perl(刪除第一個字符)請忽略 – 2010-06-13 21:45:24
除非這是一個線程實驗,否則考慮Parallel :: ForkManager或Thread :: Queue 。 – Schwern 2010-06-13 23:39:08