in reply to Interrupting a Thread
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"; }
|
|---|