Changeset 10161


Ignore:
Timestamp:
01/19/10 06:14:44 (2 years ago)
Author:
tsee
Message:

All hail the slave driver. Alas, he's on strike still.

Location:
branches/Padre-slave-driver-thread/lib/Padre
Files:
1 added
1 edited

Legend:

Unmodified
Added
Removed
  • branches/Padre-slave-driver-thread/lib/Padre/TaskManager.pm

    r10129 r10161  
    8282use Padre::Wx      (); 
    8383use Padre::Logger; 
     84require Padre::SlaveDriver; 
    8485 
    8586use Class::XSAccessor { 
     
    246247        $self->task_queue->enqueue($string); 
    247248        $self->task_queue->enqueue("STOP"); 
    248         worker_loop( Padre->ide->wx->main, $self->task_queue ); 
     249        Padre::SlaveDriver::worker_loop( Padre->ide->wx->main, $self->task_queue ); 
    249250    } 
    250251 
     
    294295 
    295296    @_ = (); # avoid "Scalars leaked" 
    296     my $worker = threads->create( 
    297         { 'exit' => 'thread_only' }, \&worker_loop, 
    298         $main, $self->task_queue 
    299     ); 
     297#   my $worker = threads->create( 
     298#       { 'exit' => 'thread_only' }, \&worker_loop, 
     299#       $main, $self->task_queue 
     300#   ); 
     301    my $worker = Padre::SlaveDriver->new->spawn($main, $self); 
     302    die if not ref $worker; 
    300303    push @{ $self->{workers} }, $worker; 
    301304} 
     
    625628} 
    626629 
    627 ########################## 
    628 # Worker thread main loop 
    629 sub worker_loop { 
    630     my ( $main, $queue ) = @_; @_ = (); # hack to avoid "Scalars leaked" 
    631     require Storable; 
    632  
    633     # Set the thread-specific main-window pointer 
    634     $_main = $main; 
    635  
    636     #warn threads->tid() . " -- Hi, I'm a thread."; 
    637  
    638     while ( my $frozen_task = $queue->dequeue ) { 
    639  
    640         #warn threads->tid() . " -- got task."; 
    641  
    642         #warn("THREAD TERMINATING"), return 1 if not ref($task) and $task eq 'STOP'; 
    643         return 1 if not ref($frozen_task) and $frozen_task eq 'STOP'; 
    644  
    645         my $task = Padre::Task->deserialize( \$frozen_task ); 
    646         $task->{__thread_id} = threads->tid(); 
    647  
    648         my $thread_start_event = 
    649             Wx::PlThreadEvent->new( -1, $TASK_START_EVENT, $task->{__thread_id} . ";" . ref($task) ); 
    650         Wx::PostEvent( $main, $thread_start_event ); 
    651  
    652         # RUN 
    653         $task->run; 
    654  
    655         # FREEZE THE PROCESS AND PASS IT BACK 
    656         undef $frozen_task; 
    657         $task->serialize( \$frozen_task ); 
    658  
    659         my $thread_done_event = Wx::PlThreadEvent->new( -1, $TASK_DONE_EVENT, $frozen_task ); 
    660         Wx::PostEvent( $main, $thread_done_event ); 
    661  
    662         #warn threads->tid() . " -- done with task."; 
    663     } 
    664  
    665     # clean up 
    666     undef $_main; 
    667 } 
    668630 
    6696311; 
Note: See TracChangeset for help on using the changeset viewer.