Changeset 10599 for trunk/Padre/lib/Padre/SlaveDriver.pm
- Timestamp:
- 02/07/10 10:12:19 (2 years ago)
- File:
-
- 1 edited
-
trunk/Padre/lib/Padre/SlaveDriver.pm (modified) (6 diffs)
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 }
Note: See TracChangeset
for help on using the changeset viewer.
