perl threading problem

Posted by Alice Wozownik on Stack Overflow See other posts from Stack Overflow or by Alice Wozownik
Published on 2010-06-13T21:44:01Z Indexed on 2010/06/13 21:52 UTC
Read the original article Hit count: 590

Filed under:
|

I'm writing a multithreaded website uptime checker in perl, and here is the basic code so far (includes only threading part):

!/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 = ) { 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--; }

It gives an error after a while: Can't call method "detach" on an undefined value at C:\perl\webchecker.pl line 28, line 245.

What causes this error? I know it is at detach, but what am I doing wrong in my code? Windows shows lots of free memory, so it should not be the computer running out of memory, this error occurs even if I set $maxthreads as low as 10 or possibly even lower.

© Stack Overflow or respective owner

Related posts about perl

Related posts about multithreading