in reply to Sharing Tk-module objects in threads
Try something like this. Making the lists scroll and a proper way to terminate the worker thread(s) is something gor you to read up on.
use strict; use Tk; use Threads; use Thread::Queue; sub create_tk_window { my $mw=MainWindow->new ( -background=>'#dedede', -foreground=>'yellow', -title=>"FingerLick" ); $mw->geometry("802x618"); $mw->minsize(802,618); $mw->maxsize(802,618); my $sent_recvd_listbox=$mw->Listbox ( -height=>10, -width=>60, -background=>'black', -foreground=>'yellow' )->pack(-side=>'bottom',-anchor=>'s',-pady=>2); my $server_list_listbox=$mw->Scrolled ( "Listbox", -height=>20, -width=>60, -background=>'white', -foreground=>'black', -scrollbars=>'se', )->pack(); return( $mw, $sent_recvd_listbox, $server_list_listbox ); } sub update_thread { my( $Qservers, $Qxmit ) = @_; while(1) { $Qservers->enqueue( "Server" . int rand 1000 ) if rand() < .1; $Qxmit->enqueue( "Sent: la la la " . int rand 1000 ) if rand() + < .1; $Qxmit->enqueue( "Recv: do be do be do " . int rand 1000 ) if +rand() < .1; select undef, undef, undef, 0.1; } } my $Qservers = new Thread::Queue; my $Qxmit = new Thread::Queue; my( $mw, $srl, $slb ) = create_tk_window(); sub updateScreen { $slb->insert( 'end', $Qservers->dequeue ) if $Qservers->pending; + $srl->insert( 'end', $Qxmit->dequeue ) if $Qxmit->pending; } threads->new( \&update_thread, $Qservers, $Qxmit )->detach; $mw->repeat( 100, \&updateScreen ); $mw->MainLoop;
|
---|
Replies are listed 'Best First'. | |
---|---|
Re^2: Sharing Tk-module objects in threads
by kabeldag (Hermit) on Nov 05, 2004 at 05:11 UTC |