summaryrefslogtreecommitdiff
path: root/thr.pl
diff options
context:
space:
mode:
Diffstat (limited to 'thr.pl')
-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;
},
);