in reply to Re^2: subprocess delay on Windows with Perl/Tk
in thread subprocess delay on Windows with Perl/Tk

I had always found "fork" non-intutive, and a pain (on Win32), because you needed a mechanism to exchange data between parent and child - the working ones are complicated (to my simple mind).

I had tested perl threads on Win32 and found that to be robust, intutive and, to my twisted brain, very logical.

The thread queue model rules!!

I had never tried using threads with Tk - so I enjoyed playing with your code.
Cheers.

Offense, like beauty, is in the eye of the beholder, and a fantasy.
By guaranteeing freedom of expression, the First Amendment also guarantees offense.

  • Comment on Re^3: subprocess delay on Windows with Perl/Tk

Replies are listed 'Best First'.
Re^4: subprocess delay on Windows with Perl/Tk
by BrowserUk (Patriarch) on Jun 05, 2004 at 18:19 UTC

    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)

    Examine what is said, not who speaks.
    "Efficiency is intelligent laziness." -David Dunham
    "Think for yourself!" - Abigail