The basic rule to remember, is that in order for a thread to be joined, it must reach the end of it's code block, OR do a return. You usually use a shared variable, such as $die, to signal the thread to return. Then you can have the main thread set $die=1, then in the thread code have
at crucial code points.return if $die;
This brings up the next big issue you will face, and that is thread code being repeatedly called, can cause a memory gain, because of the imperfect garbage collection of Perl. So..... if your program needs to constantly spawn and join threads, you may need to setup a scheme to reuse threads, and put them in a sleep loop when you don't need them, and feed them a wakeup call and fresh data when you need them.
There are many examples of this in the nodes here at perlmonks, just search for "threads" and look at all the code examples.( Or search groups.google.com for "perl threads")
A final point, changes in shared variable's values are not automatically seen between threads. Each thread needs to run a timer or loop to constantly check them.
In reply to Re: Threads question
by zentara
in thread Threads question
by xiaoyafeng
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |