#pragma once #include #include #include #include #include "Minimal.h" struct Batch { std::list jobs; }; class ThreadPool { public: ThreadPool(uint32_t numWorkers = std::thread::hardware_concurrency()); ~ThreadPool(); // cancel running jobs void cancel(); void runBatch(Batch&& batch); private: std::atomic_bool running = true; void work(); std::mutex queueLock; std::condition_variable queueCV; std::condition_variable completedCV; uint32_t numRemaining; uint32_t numRunning; std::list taskQueue; std::vector workers; };