Get rid of idle thread in MultiThreadedExecutor

This commit is contained in:
Jackie Kay 2015-12-04 13:31:12 -08:00
parent 534ae69ed5
commit dd1f38b4c8

View file

@ -42,15 +42,17 @@ MultiThreadedExecutor::spin()
} }
RCLCPP_SCOPE_EXIT(this->spinning.store(false); ); RCLCPP_SCOPE_EXIT(this->spinning.store(false); );
std::vector<std::thread> threads; std::vector<std::thread> threads;
size_t thread_id = 0;
{ {
std::lock_guard<std::mutex> wait_lock(wait_mutex_); std::lock_guard<std::mutex> wait_lock(wait_mutex_);
size_t thread_id = 1; for (; thread_id < number_of_threads_ - 1; ++thread_id) {
for (size_t i = number_of_threads_; i > 0; --i) {
std::this_thread::sleep_for(std::chrono::milliseconds(100)); std::this_thread::sleep_for(std::chrono::milliseconds(100));
auto func = std::bind(&MultiThreadedExecutor::run, this, thread_id++); auto func = std::bind(&MultiThreadedExecutor::run, this, thread_id);
threads.emplace_back(func); threads.emplace_back(func);
} }
} }
run(thread_id);
for (auto & thread : threads) { for (auto & thread : threads) {
thread.join(); thread.join();
} }