#!/usr/bin/perl use Tk; use threads; use threads::shared; use IO::Pipe; use IO::Handle; $|=1; my $news = 0; share($news); my $pipe = IO::Handle->new(); my $thread = threads->create(\&t,$pipe); $pipe->fdopen($pipeFileno,'r'); my $win = MainWindow->new(); $lb = $win->Listbox()->pack(); $win->repeat(100,sub{ update($pipe,$lb)}); MainLoop; sub t{ $pipe->fdopen($pipeFileno,'w'); while(1) { print time()."\n"; print $pipe "a\n"; $news=1; sleep(2); } } sub update { my ($pipe,$lb)=@_; # $pipe->fdopen($pipeFileno,'r'); if($news){ print "update\n"; my $tmp=<$pipe>; chomp($tmp); print "insert: $tmp\n"; $lb->insert('end',$tmp); $news=0; } }