//SPDX-FileCopyrightText: 2023 Yury Gubich //SPDX-License-Identifier: GPL-3.0-or-later #pragma once #include #include #include #include #include #include #include "job.h" namespace TM { class Manager { public: Manager(); Manager(const Manager&) = delete; Manager(Manager&&) = delete; ~Manager(); Manager& operator = (const Manager&) = delete; Manager& operator = (Manager&&) = delete; void start(); void stop(); void schedule(std::unique_ptr job); private: void loop(); private: bool terminating; std::vector threads; std::queue> queue; std::mutex mtx; std::condition_variable cond; }; }