diff options
author | dakkar <dakkar@thenautilus.net> | 2010-07-12 21:50:31 +0100 |
---|---|---|
committer | dakkar <dakkar@thenautilus.net> | 2010-07-12 21:50:31 +0100 |
commit | 0581dbd91216c18ded2812ec9f3527c0a889da76 (patch) | |
tree | 37140af2843431af4e181911529a9922c24e8083 /lib/Thread/Task | |
parent | test for TT::Handle (diff) | |
download | Thread-Task-0581dbd91216c18ded2812ec9f3527c0a889da76.tar.gz Thread-Task-0581dbd91216c18ded2812ec9f3527c0a889da76.tar.bz2 Thread-Task-0581dbd91216c18ded2812ec9f3527c0a889da76.zip |
Diffstat (limited to 'lib/Thread/Task')
-rw-r--r-- | lib/Thread/Task/Handle.pm | 2 | ||||
-rw-r--r-- | lib/Thread/Task/Manager.pm | 11 | ||||
-rw-r--r-- | lib/Thread/Task/Role/Conduit.pm | 30 |
3 files changed, 35 insertions, 8 deletions
diff --git a/lib/Thread/Task/Handle.pm b/lib/Thread/Task/Handle.pm index 5cb2eed..e3f0eea 100644 --- a/lib/Thread/Task/Handle.pm +++ b/lib/Thread/Task/Handle.pm @@ -119,7 +119,7 @@ class Thread::Task::Handle { } method stopped() { - $self->message('__STOPPED__'); + $self->message('__STOPPED__',$self->task); } method on_stopped(Task_T $new_task, @args) { diff --git a/lib/Thread/Task/Manager.pm b/lib/Thread/Task/Manager.pm index 1410799..14f6963 100644 --- a/lib/Thread/Task/Manager.pm +++ b/lib/Thread/Task/Manager.pm @@ -49,7 +49,6 @@ class Thread::Task::Manager { _workers_count => 'count', _set_worker => 'set', _get_worker => 'get', - _delete_worker => 'delete', _workers => 'elements', }, ); @@ -64,7 +63,6 @@ class Thread::Task::Manager { _set_handle => 'set', _get_handle => 'get', _delete_handle => 'delete', - _handles => 'elements', }, ); @@ -74,11 +72,9 @@ class Thread::Task::Manager { default => sub { {} }, init_arg => undef, handles => { - _running_count => 'count', _set_running => 'set', _get_running => 'get', _delete_running => 'delete', - _running => 'elements', }, ); @@ -99,7 +95,7 @@ class Thread::Task::Manager { does => Conduit_T, ); - method BUILD() { + method BUILD(HashRef $params) { $self->conduit->conduit_init($self); } @@ -131,7 +127,8 @@ class Thread::Task::Manager { } method stop_thread(Int $worker_id) { - $self->_delete_worker($worker_id)->stop; + my $worker=$self->_get_worker($worker_id); + $worker->stop; } method next_thread() { @@ -173,7 +170,7 @@ class Thread::Task::Manager { my $worker = $self->next_thread or return; $worker->hid($hid); - $handle->wid($worker->wid); + #$handle->wid($worker->wid); $worker->send(task => $handle->as_array); diff --git a/lib/Thread/Task/Role/Conduit.pm b/lib/Thread/Task/Role/Conduit.pm new file mode 100644 index 0000000..1ffbd04 --- /dev/null +++ b/lib/Thread/Task/Role/Conduit.pm @@ -0,0 +1,30 @@ +use 5.008003; +use MooseX::Declare; + +role Thread::Task::Role::Conduit { + use MooseX::Types::Moose qw(ClassName); + use Thread::Task::Types qw(Manager_T); + use Carp; + + requires 'signal'; + + has manager => ( + isa => Manager_T, + is => 'ro', + required => 0, + writer => '_set_manager', + predicate => '_has_manager', + ); + + method conduit_init(Manager_T $manager) { + $self->_set_manager($manager); + } + + before signal { + if (!$self->_has_manager) { + croak "Can't signal without a manager"; + } + } +} + +1; |