From 245e040a1c068ad1673d56b4256823cfb5dcd0ed Mon Sep 17 00:00:00 2001 From: MihailRis Date: Fri, 23 Jan 2026 22:39:20 +0300 Subject: [PATCH] add jobsSource to ThreadPool --- src/util/ThreadPool.hpp | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/util/ThreadPool.hpp b/src/util/ThreadPool.hpp index 98ebcce5b..e1f7f24d7 100644 --- a/src/util/ThreadPool.hpp +++ b/src/util/ThreadPool.hpp @@ -2,6 +2,7 @@ #include #include +#include #include #include #include @@ -48,6 +49,7 @@ namespace util { std::atomic busyWorkers = 0; std::atomic jobsDone = 0; std::atomic working = true; + supplier> jobsSource = nullptr; bool failed = false; bool standaloneResults = true; bool stopOnFail = true; @@ -151,6 +153,10 @@ namespace util { return working; } + void setJobsSource(supplier>&& source) { + jobsSource = std::move(source); + } + void terminate() override { if (!working) { return; @@ -221,6 +227,22 @@ namespace util { } } } + if (jobsSource) { + bool jobsAdded = false; + std::lock_guard jobsLock(jobsMutex); + while (true) { + auto job = jobsSource(); + if (job.has_value()) { + jobs.push(std::move(job.value())); + jobsAdded = true; + } else { + break; + } + } + if (jobsAdded) { + jobsMutexCondition.notify_one(); + } + } if (failed) { throw std::runtime_error("some job failed"); }