#pragma once #include #include #include #include #include namespace ZL { class TaskManager { private: boost::asio::io_context ioContext; std::unique_ptr> workGuard; std::vector workers; public: //TaskManager(size_t threadCount = std::thread::hardware_concurrency()) { TaskManager(size_t threadCount = 2) { workGuard = std::make_unique>(ioContext.get_executor()); for (size_t i = 0; i < threadCount; ++i) { workers.emplace_back([this]() { ioContext.run(); }); } } // Метод для добавления фоновой задачи void EnqueueBackgroundTask(std::function task) { boost::asio::post(ioContext, task); } // Graceful shutdown ~TaskManager() { workGuard.reset(); // Разрешаем ioContext.run() завершиться, когда задач не останется ioContext.stop(); // Опционально: немедленная остановка for (auto& t : workers) { if (t.joinable()) t.join(); } } }; } // namespace ZL