Hello Nickolai, & everyone else,

I've found a GREAT solution to the problem I described about how to 
update a GUI Dialog running in a "main thread" while it was receiving 
data from another Thread w/in the same process in GTKMM

Simple, really.  Here's the code:

.h
class  Class
{
      // glib connection for a timer
      //
      sigc::connection m_con;    ///< Timer Connection

     // Update GUI Method
     //
      bool  m_bUpdateGUI(void)
     {  // Update Interface
        //
         while( Gtk::Main::events_pending() )
              Gtk::Main::iteration(false);
        return true;
       };    ///< returns true so that timer is not halted

}; // Class


.cpp
ClassCclass()
{
   // Set up Timer
   //
   m_con = Glib::signal_timeout().connect( sigc::mem_fun( *this, 
&CCramWinMain::m_bUpdateGUI ), 100 );
} // ctor


Explanation:

1st - declare the      sigc::connection m_con;   Attribute of the class &
        declare the     bool  m_bUpdateGUI(void);  Method which is used 
as the primary call back for the timer.

2nd - in the class's constructor (ctor), set up the connection:
            m_con = Glib::signal_timeout().connect( sigc::mem_fun( 
*this, &CCramWinMain::m_bUpdateGUI ), 100 );

That's it.  Now my GUI is updated often enough so that the data from the 
Secondary Thread, when it is passed to the primary Thread, is properly 
updated w/in the GTK::Entry field I'm using as the display field.

Took me a while to figure this one out but it sames me from getting a 
gtkmm error message about the 'update' method being in another Thread 
and then the program crashing because the Secondary thread is calling 
the Primary Thread's UpdateGUI method.  Gtkmm doesn't like that.

Thanks all!!!  And thank you Nickolai  for emailing me!  I really 
appreciate your help. :-)

Nickolai Dobrynin wrote:
> Allen,
>
> As far as threading goes,  the following should help: 
> http://www.gtkmm.org/docs/gtkmm-2.4/docs/FAQ/html/index.html#id2516102 
> Scroll down to 4.12.
>
> Also, let me get this straight: the way you set things up is by having 
> your other thread generate numeric
> data, which you then pass to the GUI thread (however that's done) for 
> displaying.  If my understanding is correct,
> then you shouldn't need anything like
>
>  while( Gtk::Main::events_pending() )
>      Gtk::Main::iteration(false);
>
> If all else is done right, set_text(...)  will do the job.
>
>
> Regards,
>
> Nickolai

-- 
Sincerely, Allen

Gene Allen Saucier, Jr
Senior Software Engineer
CAS, Inc
100 Quality Circle
Huntsville, AL  35806
or
PO Box 11190
Huntsville, AL  35814
(256) 922-6453 (w)
"As for I and my house, we shall follow the Lord"  Joshua 25:14

_______________________________________________
gtkmm-list mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/gtkmm-list

Reply via email to