summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordakkar <dakkar@sardina.(none)>2009-08-05 16:58:51 +0200
committerdakkar <dakkar@sardina.(none)>2009-08-05 16:58:51 +0200
commita270adc3eba010eb5a6a1c1c91d463fbc60c3537 (patch)
tree8370a744eac8608ed296eb96dbd7e902ab1c805f
parentfirst draft (diff)
downloadThread-Queue-Event-a270adc3eba010eb5a6a1c1c91d463fbc60c3537.tar.gz
Thread-Queue-Event-a270adc3eba010eb5a6a1c1c91d463fbc60c3537.tar.bz2
Thread-Queue-Event-a270adc3eba010eb5a6a1c1c91d463fbc60c3537.zip
test bidirectional comms, and sub-thread spawning
-rw-r--r--thr.pl26
1 files 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;
},
);