space-game001/src/utils/TaskManager.h
2026-03-06 17:51:46 +03:00

56 lines
1.2 KiB
C++

#pragma once
#ifndef EMSCRIPTEN
#include <boost/asio.hpp>
#include <thread>
#endif
#include <functional>
#include <vector>
#include <memory>
#include <queue>
namespace ZL {
class TaskManager {
private:
#ifndef EMSCRIPTEN
boost::asio::io_context ioContext;
std::unique_ptr<boost::asio::executor_work_guard<boost::asio::io_context::executor_type>> workGuard;
std::vector<std::thread> workers;
#endif
public:
TaskManager(size_t threadCount = 2);
// ћетод дл¤ добавлени¤ фоновой задачи
void EnqueueBackgroundTask(std::function<void()> task);
// Graceful shutdown
~TaskManager();
#ifndef EMSCRIPTEN
boost::asio::io_context& getIOContext()
{
return ioContext;
}
#endif
};
class MainThreadHandler
{
private:
std::queue<std::function<void()>> mainThreadTasks;
#ifndef EMSCRIPTEN
std::mutex mainThreadMutex;
#endif
public:
void EnqueueMainThreadTask(std::function<void()> task);
// ¬ыполнение задач по одной (или пачкой) за кадр
void processMainThreadTasks();
};
} // namespace ZL