I know you're asking about threads, but from what I've experienced and researched so far on win32 and NT is that its easiest maybe to use fork. From what I can tell, fork on win32 is like a hybrid between a true fork and a thread. It doesn't create a new seperate process as seen by the task manager, but it also does not have access to global variables in the parent like a thread should.
My example shows how to use fork together with Tk to get web pages but not interfere with the gui. The child just sits there waiting for urls to get. You will have to add proxy support if you're behind a firewall though.
Oh, also, you want to make sure you download the right version of perl that supports fork. You can get this from active state at
here
#!/usr/local/bin/perl
use POSIX;
use Tk;
use LWP::UserAgent;
use URI::URL;
pipe(FROM_P, TO_C) or die "pipe: $!";
select(((select(TO_C), $| = 1))[0]);
my $ua = LWP::UserAgent->new;
if (!($pid = fork))
{
close(TO_C);
while($line = <FROM_P>) {
print "Child Pid $$ just read this: $line\n";
chomp($line);
$url = $line;
$file = 'yahoo.txt';
my $req = HTTP::Request->new(GET => $url);
$req->header('Accept' => 'text/html');
$res = $ua->request($req, $file);
};
}
my $mw = MainWindow->new();
$button = $mw->Button(-text => "click here to download yahoo web page"
+, -activebackground => 'red',
-command => \&printit)->pack();
print "i'm the parent about to mainloop\n";
MainLoop;
sub printit {
print TO_C "http:\/\/www\.yahoo\.com\n";
}
Justin Eltoft
"If at all god's gaze upon us falls, its with a mischievous grin, look at him" -- Dave Matthews |