in reply to Thread create hangs

Here's a less than satisfactory, but never the less, working work-around:

#! perl -slw use strict; use 5.010; use threads; use threads::shared; use Term::ReadKey; sub readline_NB { state $buf; my $timeout = shift; my $rv; my $chr = ReadKey( $timeout ) // ''; if( $chr eq chr(13) ) { $rv = $buf; $buf = ''; return $rv; } else { $buf .= $chr; return; } } sub thirdThread { printf "[%d] Third thread started\n", threads->tid(); } sub secondThread { while( 1 ) { sleep 2; printf "[%d] Going to start a new thread\n", threads->tid(); threads->create( \&thirdThread )->detach; } } threads->create( \&secondThread )->detach; while( 1 ) { if( my $input = readline_NB( 0.1 ) ) { print "CMD: ", $input; last if $input eq 'quit'; } else { Win32::Sleep 0.1; } } __END__ c:\test>junk48 [1] Going to start a new thread [2] Third thread started [1] Going to start a new thread [3] Third thread started CMD: fred [1] Going to start a new thread [4] Third thread started [1] Going to start a new thread [5] Third thread started CMD: bill [1] Going to start a new thread [6] Third thread started CMD: quit

Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.
RIP an inspiration; A true Folk's Guy

Replies are listed 'Best First'.
Re^2: Thread create hangs
by Anonymous Monk on Sep 29, 2010 at 00:05 UTC
    Great! Thanks for workaround. I would submit the bug to ActiveState. I have just started learning Perl. I thought ActiveState is stable because it is used extensively but this bug has changed my opinion.
      threads is a module, it is not developed by ActiveState