The snipet of code that pg posted is pretty close to the idea except, i need to be able to pause/resume/exit the
'for' loop from the gui at will..
Building on pg's example, adding pause and resume is fairly simple:
use Tk;
use Tk::ProgressBar;
use strict;
use warnings;
my $count;
my $pause = 0;
my $mw = new MainWindow(-title => "demo");
$mw->Button(-command => [\&a_long_process, \$count],
-text => "A Long Process")->pack();
$mw->Button(-text => 'Quit',
-command => sub{exit})->pack();
$mw->Button(-text => 'Pause',
-command => sub{$pause = 1})->pack();
$mw->Button(-text => 'Resume',
-command => sub{$pause = 0})->pack();
my $pb = $mw->ProgressBar(
-from => 0,
-to => 100000,
-blocks => 100000,
-colors => [0, 'green', 30000, 'yellow' , 60000, 'red'],
-variable => \$count
)->pack();
MainLoop;
sub a_long_process {
my $hash = {};
for (0..100000) {
$hash->{$_} = $_;
$count ++;
$mw->update();
if ($pause) {
while(1){
select(undef,undef,undef,0.1);
last unless $pause;
$mw->update();
}
}
}
}
I used select for subsecond sleeping, Time::HiRes could also be used.
|