Refactored parallelization code. #154
This commit is contained in:
parent
68b48fa807
commit
64e669d893
2 changed files with 26 additions and 28 deletions
|
@ -568,25 +568,24 @@ sub generate_support_material {
|
||||||
return @paths;
|
return @paths;
|
||||||
};
|
};
|
||||||
my %layer_paths = ();
|
my %layer_paths = ();
|
||||||
if ($Config{useithreads} && $Slic3r::threads > 1 && eval "use threads; use Thread::Queue; 1") {
|
Slic3r::parallelize(
|
||||||
my $q = Thread::Queue->new;
|
items => [ keys %layers ],
|
||||||
$q->enqueue(keys %layers, (map undef, 1..$Slic3r::threads));
|
thread_cb => sub {
|
||||||
|
my $q = shift;
|
||||||
my $thread_cb = sub {
|
|
||||||
my $paths = {};
|
my $paths = {};
|
||||||
while (defined (my $layer_id = $q->dequeue)) {
|
while (defined (my $layer_id = $q->dequeue)) {
|
||||||
$paths->{$layer_id} = [ $clip_pattern->($layers{$layer_id}) ];
|
$paths->{$layer_id} = [ $clip_pattern->($layers{$layer_id}) ];
|
||||||
}
|
}
|
||||||
return $paths;
|
return $paths;
|
||||||
};
|
},
|
||||||
|
collect_cb => sub {
|
||||||
foreach my $th (map threads->create($thread_cb), 1..$Slic3r::threads) {
|
my $paths = shift;
|
||||||
my $paths = $th->join;
|
|
||||||
$layer_paths{$_} = $paths->{$_} for keys %$paths;
|
$layer_paths{$_} = $paths->{$_} for keys %$paths;
|
||||||
}
|
},
|
||||||
} else {
|
no_threads_cb => sub {
|
||||||
$layer_paths{$_} = [ $clip_pattern->($layers{$_}) ] for keys %layers;
|
$layer_paths{$_} = [ $clip_pattern->($layers{$_}) ] for keys %layers;
|
||||||
}
|
},
|
||||||
|
);
|
||||||
|
|
||||||
foreach my $layer_id (keys %layer_paths) {
|
foreach my $layer_id (keys %layer_paths) {
|
||||||
my $layer = $self->layers->[$layer_id];
|
my $layer = $self->layers->[$layer_id];
|
||||||
|
|
|
@ -94,30 +94,29 @@ sub go {
|
||||||
{
|
{
|
||||||
my $fill_maker = Slic3r::Fill->new('print' => $print);
|
my $fill_maker = Slic3r::Fill->new('print' => $print);
|
||||||
|
|
||||||
if ($Config{useithreads} && $Slic3r::threads > 1 && eval "use threads; use Thread::Queue; 1") {
|
Slic3r::parallelize(
|
||||||
my $q = Thread::Queue->new;
|
items => [ 0..($print->layer_count-1) ],
|
||||||
$q->enqueue(0..($print->layer_count-1), (map undef, 1..$Slic3r::threads));
|
thread_cb => sub {
|
||||||
|
my $q = shift;
|
||||||
my $thread_cb = sub {
|
|
||||||
$Slic3r::Geometry::Clipper::clipper = Math::Clipper->new;
|
$Slic3r::Geometry::Clipper::clipper = Math::Clipper->new;
|
||||||
my $fills = {};
|
my $fills = {};
|
||||||
while (defined (my $layer_id = $q->dequeue)) {
|
while (defined (my $layer_id = $q->dequeue)) {
|
||||||
$fills->{$layer_id} = [ $fill_maker->make_fill($print->layers->[$layer_id]) ];
|
$fills->{$layer_id} = [ $fill_maker->make_fill($print->layers->[$layer_id]) ];
|
||||||
}
|
}
|
||||||
return $fills;
|
return $fills;
|
||||||
};
|
},
|
||||||
|
collect_cb => sub {
|
||||||
foreach my $th (map threads->create($thread_cb), 1..$Slic3r::threads) {
|
my $fills = shift;
|
||||||
my $fills = $th->join;
|
|
||||||
foreach my $layer_id (keys %$fills) {
|
foreach my $layer_id (keys %$fills) {
|
||||||
@{$print->layers->[$layer_id]->fills} = @{$fills->{$layer_id}};
|
@{$print->layers->[$layer_id]->fills} = @{$fills->{$layer_id}};
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
} else {
|
no_threads_cb => sub {
|
||||||
foreach my $layer (@{$print->layers}) {
|
foreach my $layer (@{$print->layers}) {
|
||||||
@{$layer->fills} = $fill_maker->make_fill($layer);
|
@{$layer->fills} = $fill_maker->make_fill($layer);
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
# generate support material
|
# generate support material
|
||||||
|
|
Loading…
Reference in a new issue