Beefy Boxes and Bandwidth Generously Provided by pair Networks
The stupid question is the question not asked
 
PerlMonks  

Re^2: Is there a way to free the Tk MainLoop without getting into parallel programming?

by Takuan Soho (Acolyte)
on Jul 22, 2009 at 14:04 UTC ( [id://782299]=note: print w/replies, xml ) Need Help??


in reply to Re: Is there a way to free the Tk MainLoop without getting into parallel programming?
in thread Is there a way to free the Tk MainLoop without getting into parallel programming?

Thank you for the hints!

Indeed, using the parent widget "update" method after any text insertion (or any graphical change to the GUI for that matter) ensures that progress messages are delivered in time.

It also makes the GUI somewhat responsive. Now, most of the time, an update call will be reached every two or three seconds. So, if the user wants to abort and press the exit button, it will exit within a couple of seconds. It's still not very elegant, but this is way better than having to wait for the entire computation to be done before the "abort" command is executed! If this is the best way to keep the GUI responsive without using parallel programming, I will be very happy to take this route.

But I still see a problem with this solution, so I would like to submit it to the eyes of the Monastery. The remaining problem is: whether it takes 0.1 seconds or 10 seconds between two update calls depends upon the user's input files. That's because the time it takes for a chunk of code to execute (and hence, the time it takes between two update calls are executed) depends on the nature of the input. Can you, monks of the Monastery, think of a way to make update calls at fixed time intervals (let say once or twice per second) even though I have little control on the time it takes to execute a chunk of code?

Thanks again for your help! It is very appreciated!

  • Comment on Re^2: Is there a way to free the Tk MainLoop without getting into parallel programming?

Replies are listed 'Best First'.
Re^3: Is there a way to free the Tk MainLoop without getting into parallel programming?
by rcaputo (Chaplain) on Jul 22, 2009 at 17:15 UTC

    It depends on the nature of the computations. If you're looping through that file yourself:

    my $t = time(); while (<$input_fh>) { process_a_line(); if (time() - $t >= 1) { $widget->update(); $t = time(); } }

    If the entire file is being atomically processed, then you'll need to get deeper into parallel programming.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://782299]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others chilling in the Monastery: (5)
As of 2024-04-19 15:04 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found