From 5242b3e03ab2b195ba9c7c53fba705a8ed1c7abd Mon Sep 17 00:00:00 2001 From: Alessandro Ranellucci Date: Sun, 27 Nov 2016 15:25:22 +0100 Subject: [PATCH] Minor fixes to parallelize code --- xs/src/libslic3r/PrintConfig.cpp | 8 ++++++-- xs/src/libslic3r/libslic3r.h | 4 +++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/xs/src/libslic3r/PrintConfig.cpp b/xs/src/libslic3r/PrintConfig.cpp index abdb26bd8e..a82ed11ceb 100644 --- a/xs/src/libslic3r/PrintConfig.cpp +++ b/xs/src/libslic3r/PrintConfig.cpp @@ -1248,8 +1248,12 @@ PrintConfigDef::PrintConfigDef() def->readonly = true; def->min = 1; def->max = 16; - def->default_value = new ConfigOptionInt(boost::thread::hardware_concurrency() || 2); - + { + int threads = boost::thread::hardware_concurrency(); + if (threads == 0) threads = 2; + def->default_value = new ConfigOptionInt(threads); + } + def = this->add("toolchange_gcode", coString); def->label = "Tool change G-code"; def->tooltip = "This custom code is inserted right before every extruder change. Note that you can use placeholder variables for all Slic3r settings as well as [previous_extruder] and [next_extruder]."; diff --git a/xs/src/libslic3r/libslic3r.h b/xs/src/libslic3r/libslic3r.h index ad8047ac84..561d0b03f4 100644 --- a/xs/src/libslic3r/libslic3r.h +++ b/xs/src/libslic3r/libslic3r.h @@ -4,6 +4,7 @@ // this needs to be included early for MSVC (listing it in Build.PL is not enough) #include #include +#include #include #include #include @@ -90,9 +91,10 @@ template void parallelize(std::queue queue, boost::function func, int threads_count = boost::thread::hardware_concurrency()) { + if (threads_count == 0) threads_count = 2; boost::mutex queue_mutex; boost::thread_group workers; - for (int i = 0; i < threads_count; i++) + for (int i = 0; i < fminf(threads_count, queue.size()); i++) workers.add_thread(new boost::thread(&_parallelize_do, &queue, &queue_mutex, func)); workers.join_all(); }