Gtk::Label::set_text() definitely causes a redraw of the label in
question. Gtk::Table::attach() will probably cause an immediate redraw of
the Table in question as well as the new child. You should check your code
for GUI calls from a non-main thread.

2008/6/18 Germán Diago <[EMAIL PROTECTED]>:

> Hello. I'm trying to draw the GUI in gtkmm through a dispatcher, since
> I cannot do it from multiple threads.
> The program behaves strangely. Sometimes it shows the images, others
> get stuck and other it does not show
> the table at all.
>
> I have multiple threads that calculate thumbnails of images. The
> program creates a Table to contain the images.
> Once an image is available (which is calculated by worker threads) , a
> signal containing the image is sent from that thread
> so that it can be put inside the table. Inside the slot Ithat handles
> a new thumbnail available I attach the image  to the table and then
> call the dispatcher(),
> which calls show_all().
> Is this correct?
>
> The (simplified) code is something like this:
>
> class GUI : public Gtk::Window
> {
> private:
>   Glib::Dispatcher d_;
>   Gtk::Table * table_;
>   Gtk::Button buttonprocessimages_;
>   Gtk::Label l_;
>   ThreadPool & pool_;
>
>   void onImageAvailable(...)
>   {
>       table_->attach(*img, row, col,...);
>       d_();
>
>   }
>
>   void redraw()
>   {
>      show_all();
>   }
>   void processImages()
>   {
>       table_ = Gtk::Manage(new Gtk::Table(........
>       pool_.set_max_threads(n);
>       send_work_to_process...
>       label_.set_text("");
>
>       buttonprocessimages_.set_sensitive(false);
>   }
> public:
>   GUI(Glib::ThreadPool & pool) : pool_(pool)
>   {
>     buttonprocessimages_.connect(sigc::mem_fun(*this,
> &GUI::processImages));
>     signal_image_available.connect(sigc::mem_fun(*this,
> &GUI::onImageAvailable));
>      d_.connect(sigc::mem_fun(*this, &GUI::redraw));
>
>   }
> };
>
>
> int main(int argc, char * argv[])
> {
>   Gtk::Main m(argc, argv);
>   Glib::thread_init();
>
>   Glib::ThreadPool pool;
>
>   GUI gui(pool);
>   pool_.set_max_threads(2);
>
>   Gtk::Main::run(gui);
>
>   return 0;
> }
>
> Can help, please? Maybe I'm drawing implicitly when I use
> label.set_text() or table_.attach() from a non-GUI thread?
> Thanks for you time.
> _______________________________________________
> gtkmm-list mailing list
> gtkmm-list@gnome.org
> http://mail.gnome.org/mailman/listinfo/gtkmm-list
>
_______________________________________________
gtkmm-list mailing list
gtkmm-list@gnome.org
http://mail.gnome.org/mailman/listinfo/gtkmm-list

Reply via email to