#include "TaskManager.h" namespace ZL { TaskManager::TaskManager(size_t threadCount) { workGuard = std::make_unique>(ioContext.get_executor()); for (size_t i = 0; i < threadCount; ++i) { workers.emplace_back([this]() { ioContext.run(); }); } } void TaskManager::EnqueueBackgroundTask(std::function task) { boost::asio::post(ioContext, task); } TaskManager::~TaskManager() { workGuard.reset(); // Разрешаем ioContext.run() завершиться, когда задач не останется ioContext.stop(); // Опционально: немедленная остановка for (auto& t : workers) { if (t.joinable()) t.join(); } } void MainThreadHandler::EnqueueMainThreadTask(std::function task) { std::lock_guard lock(mainThreadMutex); mainThreadTasks.push(task); } void MainThreadHandler::processMainThreadTasks() { std::function task; // Извлекаем только одну задачу, чтобы не блокировать update надолго { std::lock_guard lock(mainThreadMutex); if (!mainThreadTasks.empty()) { task = std::move(mainThreadTasks.front()); mainThreadTasks.pop(); } } if (task) { task(); // Здесь выполняется RefreshVBO или загрузка текстуры } } }