feat(app): add logger worker thread for asynchronous message processing

This commit is contained in:
user
2026-07-21 12:48:53 +04:00
parent 4552483a7e
commit 4366eeb92e
2 changed files with 34 additions and 9 deletions
+6 -9
View File
@@ -1,6 +1,5 @@
#pragma once
#include <atomic>
#include <thread>
#include "logger.hpp"
@@ -30,7 +29,8 @@ public:
/**
* @brief Останавливает поток записи.
*
* Дожидается завершения рабочего потока.
* Останавливает очередь сообщений и дожидается завершения
* рабочего потока после обработки оставшихся сообщений.
*/
~LoggerWorker();
@@ -50,9 +50,11 @@ public:
void start();
/**
* @brief Отправляет сигнал завершения потоку записи.
* @brief Останавливает обработку сообщений.
*
* После обработки всех сообщений worker завершит работу.
* После остановки очереди новые сообщения не принимаются.
* Рабочий поток завершится после обработки всех сообщений,
* которые уже находились в очереди.
*/
void stop();
@@ -79,11 +81,6 @@ private:
* @brief Поток записи.
*/
std::thread workerThread_;
/**
* @brief Флаг работы потока.
*/
std::atomic<bool> running_{false};
};
} // namespace app
+28
View File
@@ -0,0 +1,28 @@
#include "logger_worker.hpp"
namespace app {
LoggerWorker::LoggerWorker(logger::Logger &logger, MessageQueue &queue)
: logger_(logger), queue_(queue) {}
LoggerWorker::~LoggerWorker() { stop(); }
void LoggerWorker::start() {
workerThread_ = std::thread(&LoggerWorker::process, this);
}
void LoggerWorker::stop() {
queue_.stop();
if (workerThread_.joinable()) {
workerThread_.join();
}
}
void LoggerWorker::process() {
while (auto message = queue_.pop()) {
logger_.writeMessage(message->level, message->message);
}
}
} // namespace app