[Glade-users] uni- versus multi-threaded gtk

Russ Mannex russ at mannex.com
Sun Jun 26 00:51:37 EDT 2011


Thank you for clarifying, Alexey. Most of my coding has been very
"old-school" stuff, and most of my experience with event loops was in
X-Windows. Your recommendation makes more sense!
-- 
Mannex



On Sat, 2011-06-25 at 22:48 -0500, Alexey wrote:

> On Sat, 2011-06-25 at 11:01 -0700, David Buchan wrote:
> > // main calculation loop
> > while (flag == 0) {
> >   make some heavy duty calculations;
> > 
> > // Check if the user has clicked any buttons (e.g., the STOP button)
> >     while (gtk_events_pending()) {
> >       gtk_main_iteration();      // let the main gtk loop deal with it
> >     }
> >   carry on with more ridiculously heavy duty calculations;
> > }
> > 
> > The way I set it up, if the user clicks the STOP button, a callback is
> > executed which sets the flag to zero (flag = 0). The main calculation
> > while-loop then ends peacefully.
> 
> It's not the preferred way to do it. The preferred way is to replace
> your loop with an idle function which is called repeatedly whenever
> there's no other events are to be processed. You use g_idle_add() to add
> the function to the main loop and the main loop takes care of all the
> necessary checks. All you have to do in the function is returning TRUE
> until the job is done and finally return FALSE to stop the function
> being called. To cancel the job by the user request you'd use
> g_source_remove() in the appropriate callback.
> 
> The approach you described is acceptable only for porting some old code
> relying on polling user input within some complex loop which is too
> burdensome to untangle. In general, unless you do some low level stuff,
> if you feel the need to poll for events you probably doing something
> wrong, cause it is the main loop job to decide when and what to process.
> 
> 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.ximian.com/pipermail/glade-users/attachments/20110625/50b5c1c1/attachment.html 


More information about the Glade-users mailing list