in reply to Re^3: subprocess delay on Windows with Perl/Tk
in thread subprocess delay on Windows with Perl/Tk
The nice, if slightly strange thing is that as fork is emulated using threads (win32), you can actually use Thread::Queue to communicate between forked pseudo-processes.
#! perl -slw use strict; use threads; use Thread::Queue; $|=1; my $QpRead = new Thread::Queue; my $QkRead = new Thread::Queue; if( defined( my $kid=fork() ) ) { print 'Forked'; if( $kid ) { # Parent print 'Pop ', $$; while( 1 ) { print "Kid said: ", $QpRead->dequeue while $QpRead->pendin +g; Win32::Sleep rand 1000; $QkRead->enqueue( 'Blah ' x rand 10 ) if rand > .5; } } else { # Kid print 'Kid ', $$; while( 1 ) { print "Pop said: ", $QkRead->dequeue while $QkRead->pendin +g; Win32::Sleep rand 1000; $QpRead->enqueue( 'Blah ' x rand 10 ) if rand > .5; } } } else { die "Fork failed: $!"; } __END__ P:\test>357845 Forked Pop 416 Forked Kid -1140 Pop said: Blah Blah Blah Kid said: Blah Blah Blah Blah Kid said: Blah Kid said: Blah Blah Blah Blah Kid said: Blah Blah Blah Blah Blah Blah Blah Blah Kid said: Blah Blah Blah Blah Blah Pop said: Blah Blah Kid said: Blah Blah Blah Blah Blah Blah Blah Pop said: Blah Blah Blah Blah Blah Blah Pop said: Blah Blah Blah Blah Blah Blah Blah Pop said: Kid said: Blah Blah Blah Blah Pop said: Blah Blah Kid said: Blah Blah Blah Blah Blah Blah Blah Blah Kid said: Blah Blah Blah Blah Blah Blah Blah Blah Pop said: Blah Blah Blah Blah Blah Blah Pop said: Blah Blah Blah Blah Blah Blah Blah Blah Kid said: Blah Blah Blah Blah Blah Blah Blah Pop said: Blah Blah Blah Blah Blah Kid said: Blah Blah Blah Blah Blah Kid said: Blah Pop said: Blah Blah Blah Blah Blah Blah Blah Blah Kid said: Blah Blah Blah Blah Blah Blah Blah Pop said: Blah Kid said: Blah Blah Blah Blah Blah Pop said: Blah Blah Blah Kid said: Blah Terminating on signal SIGINT(2)
|
|---|