note
Joost
Good question. If you can spread your processing in smaller bits and you can get the smaller bits called from the MainLoop, everything will work. The way I do it in one application is that I build my own MainLoop:
<p>
<code>
use Tk::Event qw(DONT_WAIT);
while (1) {
if ($self->run) { # test if we need to process
$self->process_a_bit() # process a tiny bit
}
return if $self->quit; # test if quit status was set
DoOneEvent(DONT_WAIT); # do normal Tk event
select undef,undef,undef,0.0001; # wait for a bit
}
</code>
I did this, because my processing was not easily adjusted into the normal [perldoc://Tk::Eventloop] processing and it needed to be called a lot ("live" 44Kz audio stream processing, with 100 samples per process_a_bit call)
<p>
If you want to go this route, you want to adjust the timing of the select() and process_a_bit() calls until your GUI and processing run fast enough, and it doesn't lock up the whole machine when there is no processing being done :-)
<p>
Alternatively, if you're able to run your processing based on file events or signals, you can take a look at the Tk::Eventloop documentation for registering extra events in the normal MainLoop.
<p>
Oh yes, and you want something like [cpan://Tk::ProgressBar] but you probably know that already :-)
<!-- Node text goes above. Div tags should contain sig only -->
<div class="pmsig"><div class="pmsig-157432">
<em>[id://149675|"What should it profit a man, if he should win a flame war, yet lose his cool?"]</em>
</div></div>
372392
372392