/
Shymer123
/
LumenServer
Обзор
Документация
Войти
/
Shymer123
/
LumenServer
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
Server/SourceFiles/Core/Infrastructure/TaskQueue.cpp
60 строк
2 KB
Shymer123
Initial commit: LumenServer
20 июн 2026, 12:43
20 июн 2026, 12:43
173f14c
Код
Авторство
О чём код?
#include "TaskQueue.h" #include <iostream> namespace Core::Infrastructure { TaskQueue::TaskQueue(size_t threads) : m_threadsCount(threads) {} TaskQueue::~TaskQueue() noexcept { stop(); } void TaskQueue::start() { std::cout << "[WorkerPoolManager] Starting " << m_threadsCount << " worker threads..." << std::endl; for(size_t i = 0; i < m_threadsCount; ++i) { m_workers.emplace_back([this] { while(true) { std::move_only_function<void()> task; { std::unique_lock lock(m_mutex); m_cv.wait(lock, [this]{ return m_stopped || !m_tasks.empty(); }); if(m_stopped && m_tasks.empty()) return; task = std::move(m_tasks.front()); m_tasks.pop(); } task(); } }); } } void TaskQueue::stop() { if(!m_stopped.exchange(true)) { { std::lock_guard<std::mutex> lock(m_mutex); std::cout << "[WorkerPoolManager] Stopping worker pool" << std::endl; m_cv.notify_all(); } for(auto& t : m_workers) { if(t.joinable()) { t.join(); } } m_workers.clear(); } } } // namespace Core::Infrastructure