in reply to Re: Child reading from Parent
in thread Child reading from Parent

I liked the thread idea. How are threads on overhead and processing? The code below seems to work well. However I get the following message when the "Processing Complete" message is printed: "A thread exited while 2 other threads were still running.". Any idea why?
use threads; use threads::shared; use strict; $|++; my $stream = *STDOUT; my $thingy = [ "\\", "|", "/", "-" ]; my $rate = 0.175; my $step = 0; my $spin_stop : shared; $spin_stop = 0; print "Processing..."; my $thread = threads->create(\&_spin); select(undef,undef,undef, 5); print "\nProcessing Completed\n"; $spin_stop = 1; sub _spin { SPIN: while(1) { my $old_fh = select($stream); local $| = 1; print $stream $$thingy[$step], chr(8) x length($$thingy[$step]); select($old_fh); $step = ( $step+1 > $#$thingy ? 0 : $step+1 ); select(undef,undef,undef, $rate); last SPIN if($spin_stop == 1); } return; }

Replies are listed 'Best First'.
Re: Re: Re: Child reading from Parent
by icius (Sexton) on Feb 20, 2003 at 00:25 UTC
    OK, I added a $thread->join(); after the $spin_stop = 1; statement which gets rid of the error, but is it good practice?
Re: Re: Re: Child reading from Parent
by Jenda (Abbot) on Feb 20, 2003 at 13:57 UTC

    If you are running the script under Windows even the fork() uses threads. See perldoc perlfork.

    The big difference is that with fork() you do not get the shared variables and the ->join(). If you use the threads you SHOULD use the ->join(), if you use fork() you should use waitpid(). Though in this case since you do not create many threads the waitpid() is not that important.

    Jenda