#pragma once #include #include #include #include #include #include #include class TaskManager { public: using Job = std::function; TaskManager(); ~TaskManager(); void start(); void stop(); void wait() const; void queue(const Job& job); bool busy() const; private: void loop(); private: bool running; bool stopping; uint32_t maxThreads; uint32_t activeThreads; std::queue jobs; mutable std::mutex mutex; mutable std::condition_variable loopConditional; mutable std::condition_variable waitConditional; std::vector threads; };