Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?
 
PerlMonks  

Re: Keeping the user informed: A Tk/Threads question

by BrowserUk (Pope)
on Jul 07, 2004 at 18:40 UTC ( #372499=note: print w/replies, xml ) Need Help??


in reply to Keeping the user informed: A Tk/Threads question

Here ya go. Put the long running code into the work() sub and periodically update $progress (as shown) with a value between 0-100.

#!perl -slw use strict; use threads qw[ async ]; use threads::shared; our $WORKMAX ||= 1_000; ## A shared var to communicate progess between work thread and TK my $progress : shared = 0; sub work{ for my $item ( 0 .. $WORKMAX ) { { lock $progress; $progress = ( $item / $WORKMAX ) * 100; } select undef, undef, undef, 0.001; ## do stuff that takes time } } threads->new( \&work )->detach; ## For lowest memory consumption require (not use) ## Tk::* after you've started the work thread. require Tk::ProgressBar; my $mw = MainWindow->new; my $pb = $mw->ProgressBar()->pack(); my $repeat; $repeat = $mw->repeat( 100 => sub { print $progress; $repeat->cancel if $progress == 100; $pb->value( $progress ) } ); $mw->MainLoop;

Examine what is said, not who speaks.
"Efficiency is intelligent laziness." -David Dunham
"Think for yourself!" - Abigail
"Memory, processor, disk in that order on the hardware side. Algorithm, algoritm, algorithm on the code side." - tachyon

Replies are listed 'Best First'.
Re^2: Keeping the user informed: A Tk/Threads question
by Grygonos (Chaplain) on Jul 07, 2004 at 20:48 UTC
    You must be really bored today :) Thanks for the sample code. I haven't done perl threads before, although I'm pretty experienced with Java's threads, and have done threads in C before. I'm gonna read up on it a bit and see what comes of it. Thanks again :)

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://372499]
help
Chatterbox?
[Corion]: At least back in the day Firefox (well, Netscape) used to cache the DNS itself because there was no OS API to asynchronously resolve names (?) Maybe that code still lives on
[Corion]: Mhmm. Our datawarehouse is named after the department, except that the department changed its name one year ago. Now I guess I'm looking for the moral equivalent of "THE Datawarehouse", where "THE" stands for "Traditional High-valued Expertise" ;)

How do I use this? | Other CB clients
Other Users?
Others cooling their heels in the Monastery: (8)
As of 2017-07-26 08:40 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    I came, I saw, I ...
























    Results (386 votes). Check out past polls.