diff options
author | dakkar <dakkar@sardina.(none)> | 2009-08-06 14:49:44 +0200 |
---|---|---|
committer | dakkar <dakkar@sardina.(none)> | 2009-08-06 14:50:29 +0200 |
commit | fc2e454e91daec9854302431f48b31f2181d03c9 (patch) | |
tree | ed6a0867152a4be8f9b26dc6fd1cbbe49563cd40 | |
parent | refactor and expose more methods (diff) | |
download | Thread-Queue-Event-fc2e454e91daec9854302431f48b31f2181d03c9.tar.gz Thread-Queue-Event-fc2e454e91daec9854302431f48b31f2181d03c9.tar.bz2 Thread-Queue-Event-fc2e454e91daec9854302431f48b31f2181d03c9.zip |
refactor to roles
-rw-r--r-- | lib/Thread/Queue/Event.pm (renamed from Queue.pm) | 22 | ||||
-rw-r--r-- | lib/Thread/Queue/Event/Glib.pm | 14 | ||||
-rw-r--r-- | thr.pl | 7 |
3 files changed, 33 insertions, 10 deletions
diff --git a/Queue.pm b/lib/Thread/Queue/Event.pm index cd978e5..3d82c4d 100644 --- a/Queue.pm +++ b/lib/Thread/Queue/Event.pm @@ -1,4 +1,4 @@ -package Glib::Thread::Queue; +package Thread::Queue::Event; use Moose; use Glib; use Thread::Queue; @@ -57,12 +57,6 @@ after enqueue => \&_pipe_write; before dequeue => \&_pipe_read; -sub add_watch { - my ($self,$sub)=@_; - - Glib::IO->add_watch($self->event_fileno,'in',$sub); -} - sub signal { my ($self)=@_; @@ -72,5 +66,19 @@ sub signal { $self->_pipe_write(); } +sub with_role { + my ($self,$role)=@_; + + if ($role !~ /::/) { + $role="Thread::Queue::Event::$role"; + } + + Class::MOP::load_class($role); + + $role->meta->apply($self); + + return $self; +} + no Moose; 1; diff --git a/lib/Thread/Queue/Event/Glib.pm b/lib/Thread/Queue/Event/Glib.pm new file mode 100644 index 0000000..1c36c99 --- /dev/null +++ b/lib/Thread/Queue/Event/Glib.pm @@ -0,0 +1,14 @@ +package Thread::Queue::Event::Glib; +use Moose::Role; +use Glib; + +requires 'event_fileno'; + +sub add_watch { + my ($self,$sub)=@_; + + Glib::IO->add_watch($self->event_fileno,'in',$sub); +} + +no Moose; +1; @@ -3,7 +3,8 @@ use strict; use warnings; use threads; use Glib; -use Queue; +use Thread::Queue::Event; +use Thread::Queue::Event::Glib; =head1 Signaling across threads to a Glib loop @@ -11,8 +12,8 @@ Looks like the best way is to use a pipe =cut -my $q=Glib::Thread::Queue->new(); -my $q2=Glib::Thread::Queue->new(); +my $q=Thread::Queue::Event->new()->with_role('Glib'); +my $q2=Thread::Queue::Event->new(); threads->create( sub{ |