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