Changeset 10161
- Timestamp:
- 01/19/10 06:14:44 (2 years ago)
- Location:
- branches/Padre-slave-driver-thread/lib/Padre
- Files:
-
- 1 added
- 1 edited
-
SlaveDriver.pm (added)
-
TaskManager.pm (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/Padre-slave-driver-thread/lib/Padre/TaskManager.pm
r10129 r10161 82 82 use Padre::Wx (); 83 83 use Padre::Logger; 84 require Padre::SlaveDriver; 84 85 85 86 use Class::XSAccessor { … … 246 247 $self->task_queue->enqueue($string); 247 248 $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 ); 249 250 } 250 251 … … 294 295 295 296 @_ = (); # 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; 300 303 push @{ $self->{workers} }, $worker; 301 304 } … … 625 628 } 626 629 627 ##########################628 # Worker thread main loop629 sub worker_loop {630 my ( $main, $queue ) = @_; @_ = (); # hack to avoid "Scalars leaked"631 require Storable;632 633 # Set the thread-specific main-window pointer634 $_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 # RUN653 $task->run;654 655 # FREEZE THE PROCESS AND PASS IT BACK656 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 up666 undef $_main;667 }668 630 669 631 1;
Note: See TracChangeset
for help on using the changeset viewer.
