in reply to Interrupting a Thread

To avoid that error, you must "return from the thread" first, then join it. If the thread was detached, no need to join, but you won't be able to get a return value. So remember, the thread must

1. Reach the end of it's code block(or return).

2. Must be joined, unless it was detached.

Here is a simple example, where I use a "goto FINISH" to force the thread to the end of it's code block, but I could have used "return". Now, if you want to kill a thread(s) prematurely, just set it's 'die' signal to one and join it.

#!/usr/bin/perl use warnings; use strict; use threads; use threads::shared; $| = 1; my %threads; foreach (1..10){ share ($threads{$_}{'die'}); $threads{$_}{'die'} = 0; } foreach (1..10) { $threads{$_}{'thread'} = threads->new('StartTest'); } my @threads = (1..10); foreach(@threads){ $threads{$_}{'die'} = 1; $threads{$_}{'thread'}->join; } print "\n", "All threads done\nHit Enter to exit\n"; <>; ########################################################## sub StartTest { my $self = threads->self; print "Thread ", $self->tid, " started\n"; while(1){ if( $threads{$_}{'die'} == 1){goto FINISH} else{ select(undef,undef,undef, 5) }; } FINISH: print "Thread ", $self->tid, " ending\n"; }

I'm not really a human, but I play one on earth. flash japh