diff options
author | dakkar <dakkar@sardina.(none)> | 2009-08-06 15:15:03 +0200 |
---|---|---|
committer | dakkar <dakkar@sardina.(none)> | 2009-08-06 15:15:03 +0200 |
commit | 4de7ff82b202dbef8c57954126932710fe1a82bd (patch) | |
tree | 3b7b12012cd4a5d8892b88fe18164e3439c3c523 /thr.pl | |
parent | dequeue_nb but untested (diff) | |
download | Thread-Queue-Event-4de7ff82b202dbef8c57954126932710fe1a82bd.tar.gz Thread-Queue-Event-4de7ff82b202dbef8c57954126932710fe1a82bd.tar.bz2 Thread-Queue-Event-4de7ff82b202dbef8c57954126932710fe1a82bd.zip |
Diffstat (limited to 'thr.pl')
-rw-r--r-- | thr.pl | 60 |
1 files changed, 0 insertions, 60 deletions
@@ -1,60 +0,0 @@ -#!/usr/bin/perl -use strict; -use warnings; -use threads; -use Glib; -use Thread::Queue::Event; -use Thread::Queue::Event::Glib; - -=head1 Signaling across threads to a Glib loop - -Looks like the best way is to use a pipe - -=cut - -my $q=Thread::Queue::Event->new()->with_role('Glib'); -my $q2=Thread::Queue::Event->new(); - -threads->create( - sub{ - print "(1) sleeping\n"; - sleep 2; - print "(1) sending boo\n"; - $q->enqueue('boo'); - sleep 2; - threads->create( - sub{ - print "(2) inserting bar & foo\n"; - $q->insert(0,'bar'); - $q->insert(1,'foo'); - print "(2) signaling\n"; - $q->signal(); - print "(2) signaling\n"; - $q->signal(); - }); - sleep 2; - print "(1) waiting for command\n"; - my $cmd=$q2->dequeue; - print "(1) got $cmd\n"; - print "(1) sending quit"; - $q->enqueue('quit'); -}); - -my $loop=Glib::MainLoop->new(); -$q->add_watch(sub{ - print "(m) waking up\n"; - my $foo=$q->dequeue(); - print "(m) got $foo\n"; - if ($foo eq 'quit') { - print "(m) quitting\n"; - $loop->quit; - } - elsif ($foo eq 'foo') { - print "(m) sending command\n"; - $q2->enqueue('the command'); - print "(m) sent command\n"; - } - return Glib::SOURCE_CONTINUE; - }, - ); -$loop->run; |