use warnings; use strict; use threads; use threads::shared; my $var =1; share $var; my $data; share $data; my @threads; push @threads, threads->create(\&thread); push @threads, threads->create(\&tk_thread); $_ -> join for @threads; print "threads joined\n"; sub thread{ my $counter = 0; while (1){ if ($var==1){ print "thread doing work\n"; { lock $data; $data = $counter++; } sleep (1); }elsif($var == 0){ print "thread waiting\n"; sleep(1); }else{ print "thread finished\n"; return; } } } sub tk_thread{ require Tk; Tk->import; my $mw = tkinit(); my $text = $mw->Text->pack; $mw->Button(-text => 'start_stop', -command => sub {{lock $var; $var = $var? 0 : 1 } }, )->pack; $mw->Button(-text => 'beenden', -command => sub{{lock $var; $var = -1; $mw->destroy;} }, )->pack; $mw->repeat(100,sub{{lock $data; $text->insert('end', $data."\n") if $data; $data = ''; } } ); MainLoop(); }