#! perl -slw use strict; use threads; use Thread::Queue; use Tk::Listbox; my $Q = new Thread::Queue; ## start a thread monitoring events async { ## Simulate asynchronous events with random sleeps while( sleep 1+rand 3 ) { ## When an event happens, Q it to the GUI thread. $Q->enqueue( "Event " . time ); } }->detach; my $mw = MainWindow->new; my $lb = $mw->Listbox()->pack; # 10 times per second my $repeat = $mw->repeat( 100 => sub { ##check to see if there are any events in the queue while( $Q->pending ) { ## if there are, grab them my $event = $Q->dequeue; ## adde them to the end of the listbox $lb->insert( 'end', $event ); ## and make sure the latest is visible. $lb->see( 'end' ); } }); $mw->MainLoop;