Re: Is it possible to stop a signal callback?



On Sun, 05 Aug 2007 23:35:24 +0800
"Ye Wenbin" <wenbinye gmail com> wrote:

Hi,
In my application, there is a callback which may take a long time to  
finish.
Is it possible to return from the callback when user really need? For  
example,
code as following, can I press the button 'cancel' to stop the counting?
Is there any document about thread in Gtk2?

Have you looked at 
http://forgeftp.novell.com/gtk2-perl-study/download/ 
it will answer alot of questions.


$but = Gtk2::Button->new('start');
$but->signal_connect(
    'clicked' => sub {
        my $i = 0;

Don't use while(1) or sleep in a gui script, they cause malfunctions.
        while ($i < 10) {
            sleep( 1 );
            $i++;
            print "I'm working\n";
        }
        return FALSE;
    }
);

Try this:
#!/usr/bin/perl
use warnings;
use strict;
use Gtk2 '-init';
use Glib qw(TRUE FALSE);

my $cancel = 0;

my $window = Gtk2::Window->new('toplevel');
$window->signal_connect('delete_event' => sub { Gtk2->main_quit; });

my $hbox= Gtk2::HBox->new(FALSE, 0);
my $but;
$but = Gtk2::Button->new('start');

$but->signal_connect(
     'clicked' => sub {
         my $i = 0;
#         while ($i < 1000) {
#            # sleep( 1 );
#             $i++;
#             print "I'm working $i\n";
           
            my $id = Glib::Timeout->add (1000, sub{
                $i++;
                if($i > 1000){print "done\n";$cancel = 0; return FALSE;}
                if($cancel==1){print "done\n";$cancel = 0; return FALSE;}
                print "I'm working $i\n";
                
                });                             

         #}
         
         return FALSE;
     }
);
$hbox->pack_start($but, TRUE, TRUE, 5);

$but = Gtk2::Button->new('Cancel');
$but->signal_connect(
     'clicked' => sub {
         $cancel = 1;
         warn "Stop it\n";
     }
);

$hbox->pack_start($but, TRUE, TRUE, 5);
$window->add($hbox);
$window->show_all();
Gtk2->main;
__END__

zentara

-- 
I'm not really a human, but I play one on earth.
http://zentara.net/japh.html



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]