summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordakkar <dakkar@sardina.(none)>2009-08-06 14:49:44 +0200
committerdakkar <dakkar@sardina.(none)>2009-08-06 14:50:29 +0200
commitfc2e454e91daec9854302431f48b31f2181d03c9 (patch)
treeed6a0867152a4be8f9b26dc6fd1cbbe49563cd40
parentrefactor and expose more methods (diff)
downloadThread-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.pm14
-rw-r--r--thr.pl7
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;
diff --git a/thr.pl b/thr.pl
index 4831f29..a2e1386 100644
--- a/thr.pl
+++ b/thr.pl
@@ -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{