diff options
author | dakkar <dakkar@sardina.(none)> | 2009-08-05 16:58:51 +0200 |
---|---|---|
committer | dakkar <dakkar@sardina.(none)> | 2009-08-05 16:58:51 +0200 |
commit | a270adc3eba010eb5a6a1c1c91d463fbc60c3537 (patch) | |
tree | 8370a744eac8608ed296eb96dbd7e902ab1c805f | |
parent | first draft (diff) | |
download | Thread-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.pl | 26 |
1 files changed, 19 insertions, 7 deletions
@@ -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; }, ); |