sub MyApp::GUI::WorkQ { my( $qin, $qout ) = @_; .... Glib::Timeout->add( 50, sub { CheckQ( $qout, $statuswindow} } ); Gtk2->main; } sub OnConnectButton { my( $qin, $passwindow ) = @_; my $password = $passwindow->get_text; ... $qin->enqueue( { action => 'connect', password => $password, ... } ); } sub CheckQ { my( $qout, $statuswindow ) = @_; if( defined( my $ref = $qout->popnow ) ) { my $msg = $ref->{status}; $statuswindow->set_text( $msg ); } return 1; ## don't cancel timeout, repeat it }