From a270adc3eba010eb5a6a1c1c91d463fbc60c3537 Mon Sep 17 00:00:00 2001 From: dakkar Date: Wed, 5 Aug 2009 16:58:51 +0200 Subject: test bidirectional comms, and sub-thread spawning --- thr.pl | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/thr.pl b/thr.pl index c648509..d1690ec 100644 --- a/thr.pl +++ b/thr.pl @@ -12,6 +12,7 @@ Looks like the best way is to use a pipe =cut my $q=Glib::Thread::Queue->new(); +my $q2=Glib::Thread::Queue->new(); threads->create( sub{ @@ -20,14 +21,20 @@ threads->create( print "sending boo\n"; $q->enqueue('boo'); sleep 2; - print "inserting bar & foo\n"; - $q->insert(0,'bar'); - $q->insert(1,'foo'); - print "signaling\n"; - $q->signal(); - print "signaling\n"; - $q->signal(); + threads->create( + sub{ + print "inserting bar & foo\n"; + $q->insert(0,'bar'); + $q->insert(1,'foo'); + print "signaling\n"; + $q->signal(); + print "signaling\n"; + $q->signal(); + }); sleep 2; + print "waiting for command\n"; + my $cmd=$q2->dequeue; + print "got $cmd\n"; print "sending quit"; $q->enqueue('quit'); }); @@ -41,6 +48,11 @@ $q->add_watch(sub{ print "quitting\n"; $loop->quit; } + elsif ($foo eq 'foo') { + print "sending command\n"; + $q2->enqueue('the command'); + print "sent command\n"; + } return Glib::SOURCE_CONTINUE; }, ); -- cgit v1.2.3