my $paused :shared = 0; sub thread { while( my $domain = $queue->dequeue ) { sleep 1 while $paused; ## the rest of the thread code. } } ... $pauseButton->onclick( sub { if( $paused ) { $paused = 0; $self->settext( "Pause" ); } else { $paused = 1; $self->settext( "resume" ); } } }; ...