Changeset 10599
- Timestamp:
- 02/07/10 10:12:19 (7 months ago)
- Location:
- trunk/Padre
- Files:
-
- 5 modified
-
lib/Padre/SlaveDriver.pm (modified) (6 diffs)
-
lib/Padre/Task.pm (modified) (4 diffs)
-
lib/Padre/TaskManager.pm (modified) (6 diffs)
-
lib/Padre/Wx/Dialog/PluginManager.pm (modified) (1 diff)
-
t/86-service.t (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Padre/lib/Padre/SlaveDriver.pm
r10585 r10599 67 67 SCOPE: { 68 68 my $SlaveDriver; 69 69 70 sub new { 70 71 my $class = shift; 71 72 return $SlaveDriver if defined $SlaveDriver; 72 @_ = ();73 @_ = (); 73 74 $SlaveDriver = bless { 74 75 cmd_queue => Thread::Queue->new, … … 111 112 112 113 sub spawn { 113 my $self = shift;114 my $self = shift; 114 115 my $task_manager = shift; 115 116 require Storable; 116 $self->{cmd_queue}->enqueue( 117 Storable::freeze( [ $task_manager->task_queue ] ) 118 ); 119 return threads->object( 120 $self->{tid_queue}->dequeue 121 ); 117 $self->{cmd_queue}->enqueue( Storable::freeze( [ $task_manager->task_queue ] ) ); 118 return threads->object( $self->{tid_queue}->dequeue ); 122 119 } 123 120 … … 150 147 sub cleanup { 151 148 my $self = shift; 152 if ( defined $self->{master} and defined $self->{cmd_queue}) {149 if ( defined $self->{master} and defined $self->{cmd_queue} ) { 153 150 $self->{cmd_queue}->enqueue('STOP'); 154 151 require Time::HiRes; 155 152 Time::HiRes::usleep(5000); # 5 milli-sec 156 if ( $self->{master}->is_joinable) {153 if ( $self->{master}->is_joinable ) { 157 154 $self->{master}->join; 158 155 } 159 156 } 157 160 158 # TaskManager does handle thread *killing* 161 159 } … … 168 166 # Worker thread main loop 169 167 sub _worker_loop { 170 my ( $queue) = @_;168 my ($queue) = @_; 171 169 @_ = (); # hack to avoid "Scalars leaked" 172 170 … … 175 173 176 174 # Set the thread-specific main-window pointer 177 my $main = Padre->ide->wx; 175 my $main = Padre->ide->wx; 178 176 179 177 #warn threads->tid() . " -- Hi, I'm a thread."; … … 214 212 while ( my $args = $inqueue->dequeue ) { # args is frozen [$main, $queue] 215 213 last if $args eq 'STOP'; 216 my $task_queue = Padre::SlaveDriver->new->task_queue;217 my $worker_thread = threads->create( \&_worker_loop, $task_queue);218 my $tid = $worker_thread->tid;214 my $task_queue = Padre::SlaveDriver->new->task_queue; 215 my $worker_thread = threads->create( \&_worker_loop, $task_queue ); 216 my $tid = $worker_thread->tid; 219 217 $outqueue->enqueue($tid); 220 218 } -
trunk/Padre/lib/Padre/Task.pm
r10575 r10599 153 153 return $self; 154 154 } 155 155 156 =head2 schedule 156 157 … … 165 166 SCOPE: { 166 167 my $event_hooks_initialized = 0; 168 167 169 sub schedule { 168 170 my $self = shift; 169 if ( not $event_hooks_initialized) {171 if ( not $event_hooks_initialized ) { 170 172 $event_hooks_initialized = 1; 171 173 my $main = Padre->ide->wx; … … 428 430 @_ = (); # hack to avoid "Scalars leaked" 429 431 my $main = $wx->main; 430 my $out = $main->output();432 my $out = $main->output(); 431 433 $main->show_output(1); 432 434 $out->style_neutral(); … … 440 442 @_ = (); # hack to avoid "Scalars leaked" 441 443 my $main = $wx->main; 442 my $out = $main->output();444 my $out = $main->output(); 443 445 $main->show_output(1); 444 446 $out->style_bad(); -
trunk/Padre/lib/Padre/TaskManager.pm
r10579 r10599 118 118 reap_interval => 15000, 119 119 @_, 120 workers => [], 121 # grab a copy of the task_queue that's now handled by the slave driver 120 workers => [], 121 122 # grab a copy of the task_queue that's now handled by the slave driver 122 123 task_queue => Padre::SlaveDriver->new()->task_queue, 123 124 running_tasks => {}, … … 132 133 _init_events($main); 133 134 134 # To be removed: Old task queue instantiation => Padre::SlaveDriver135 # To be removed: Old task queue instantiation => Padre::SlaveDriver 135 136 #$self->{task_queue} = Thread::Queue->new; 136 137 … … 240 241 $self->task_queue->enqueue($string); 241 242 $self->task_queue->enqueue("STOP"); 242 require Padre::SlaveDriver;243 no warnings 'once';244 if (not defined $Padre::SlaveDriver::TASK_DONE_EVENT) {245 Padre::SlaveDriver->_init_events();246 }243 require Padre::SlaveDriver; 244 no warnings 'once'; 245 if ( not defined $Padre::SlaveDriver::TASK_DONE_EVENT ) { 246 Padre::SlaveDriver->_init_events(); 247 } 247 248 Padre::SlaveDriver::_worker_loop( $self->task_queue ); 248 249 } … … 293 294 294 295 295 # To be removed: Old worker thread cration. => Padre::SlaveDriver296 # @_ = (); # avoid "Scalars leaked"297 # my $worker = threads->create(298 # { 'exit' => 'thread_only' }, \&worker_loop,299 # $main, $self->task_queue300 # );296 # To be removed: Old worker thread cration. => Padre::SlaveDriver 297 # @_ = (); # avoid "Scalars leaked" 298 # my $worker = threads->create( 299 # { 'exit' => 'thread_only' }, \&worker_loop, 300 # $main, $self->task_queue 301 # ); 301 302 my $worker = Padre::SlaveDriver->new->spawn($self); 302 303 die if not ref $worker; … … 421 422 } 422 423 423 # cleanup master thread, too424 Padre::SlaveDriver->new->cleanup();424 # cleanup master thread, too 425 Padre::SlaveDriver->new->cleanup(); 425 426 426 427 # didn't work the nice way? … … 554 555 sub on_task_start_event { 555 556 my ( $wx, $event ) = @_; @_ = (); # hack to avoid "Scalars leaked" 556 # TO DO/FIXME:557 # This should somehow get at the specific TaskManager object558 # instead of going through the Padre globals!559 my $main = $wx->main;557 # TO DO/FIXME: 558 # This should somehow get at the specific TaskManager object 559 # instead of going through the Padre globals! 560 my $main = $wx->main; 560 561 my $manager = Padre->ide->task_manager; 561 562 my $tid_and_task_type = $event->GetData(); -
trunk/Padre/lib/Padre/Wx/Dialog/PluginManager.pm
r10580 r10599 350 350 my $message = $self->{plugin}->errstr; 351 351 my $title = Wx::gettext('Error'); 352 352 353 353 # @INC gets printed out between () remove that for now 354 354 $message =~ s/\(\@INC.*\)//; 355 355 356 356 Wx::MessageBox( $message, $title, Wx::wxOK | Wx::wxCENTER, $self ); 357 357 } -
trunk/Padre/t/86-service.t
r10578 r10599 15 15 use t::lib::Padre; 16 16 use Padre::Service; 17 17 18 # Create the object so that Padre->ide works 18 19 my $app = Padre->new;
