http://qs321.pair.com?node_id=11117985


in reply to Second background process is pausing the gui

Here's how I'd do it.

#!/usr/bin/perl use strict; # https://perlmonks.org/?node_id=11117902 use warnings; use Tk; use Tk::IO; my $date = localtime(); my $mw = MainWindow->new; $mw->Button(-text => 'Start', -command => \&start, )->pack(-side => 'top', -fill => 'x'); $mw->Label(-textvariable => \$date, -fg => 'blue', )->pack(-side => 'top', -fill => 'x'); $mw->Button(-text => 'Exit', -command => sub {$mw->destroy}, )->pack(-side => 'bottom', -fill => 'x'); $_ = $mw->Text(-width => 10, -font => 14, )->pack(-side => 'left') for my( $one, $two ); $mw->repeat( 1000, sub { $date = localtime() } ); MainLoop; sub start { Tk::IO->new(-linecommand => sub { $one->insert(end => shift); $one->see('end');}, )->exec('for i in `seq 1 24` ; do sleep .5 ; echo $i ; done'); Tk::IO->new(-linecommand => sub { $two->insert(end => shift); $two->see('end');}, )->exec('for i in `seq 1 24` ; do sleep .7 ; echo $i ; done'); }

Note that the date keeps advancing while the text widgets are being filled in, indicating that the gui is still responding.