xiaoyafeng has asked for the wisdom of the Perl Monks concerning the following question:

Hi monks

like below code ,it leads to gui no-responsible since sleeping time in sub count is greater than interval time.
use strict; use warnings; my $count_num=0; use Gtk2 -init; my $builder = Gtk2::Builder->new(); my $integer = $builder->add_from_file("gtk_test.glade"); my $dialog_obj = $builder->get_object("dialog1"); my $OK_obj = $builder->get_object("OK"); my $label1_obj = $builder->get_object("label1"); $dialog_obj->signal_connect(destroy => sub { Gtk2->main_quit() }); my $timeout = Glib::Timeout->add(1000,\&count); $dialog_obj->show_all(); Gtk2->main; sub count { $count_num + sleep 200; $label1_obj->set_label($count_num); 1; }
My question is if there is a way to still manipulate other widgets when a CPU-intensive callback running background (in Gtk2, Tk, Wx etc.)?




I am trying to improve my English skills, if you see a mistake please feel free to reply or /msg me a correction

Replies are listed 'Best First'.
Re: How treat CPU-intensive callback in Gtk2 or others
by roboticus (Chancellor) on Jul 17, 2010 at 12:11 UTC

    xiaoyafeng:

    Generally, it's best to make the event callbacks handle only GUI activity, and send appropriate messages to threads for non-GUI activities. In practice, though, you'll find it useful to do trivial non-GUI stuff in event callbacks. (Though I recommend even keeping the non-GUI stuff out of the event processing loop--once you build enough infrastructure to do your non-trivial tasks in a different thread, it's generally easy enough to keep the trivial stuff there too. That way, you have fewer headaches (variable synchronization, sequencing processing tasks, etc.)

    ...roboticus

Re: How treat CPU-intensive callback in Gtk2 or others
by Anonymous Monk on Jul 17, 2010 at 10:50 UTC