shadow-over-bishkek001/src/utils/TaskManager.h
2026-01-15 13:41:00 +03:00

48 lines
1.1 KiB
C++

#pragma once
#include <boost/asio.hpp>
#include <functional>
#include <vector>
#include <thread>
#include <memory>
#include <queue>
namespace ZL {
class TaskManager {
private:
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;
public:
//TaskManager(size_t threadCount = std::thread::hardware_concurrency());
TaskManager(size_t threadCount = 2);
// Ìåòîä äëÿ äîáàâëåíèÿ ôîíîâîé çàäà÷è
void EnqueueBackgroundTask(std::function<void()> task);
// Graceful shutdown
~TaskManager();
boost::asio::io_context& getIOContext()
{
return ioContext;
}
};
class MainThreadHandler
{
private:
std::queue<std::function<void()>> mainThreadTasks;
std::mutex mainThreadMutex;
public:
void EnqueueMainThreadTask(std::function<void()> task);
// Âûïîëíåíèå çàäà÷ ïî îäíîé (èëè ïà÷êîé) çà êàäð
void processMainThreadTasks();
};
} // namespace ZL