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 #pragma once
#include <atomic>
#include <thread> #include <thread>
#include "logger.hpp" #include "logger.hpp"
@@ -30,7 +29,8 @@ public:
/** /**
* @brief Останавливает поток записи. * @brief Останавливает поток записи.
* *
* Дожидается завершения рабочего потока. * Останавливает очередь сообщений и дожидается завершения
* рабочего потока после обработки оставшихся сообщений.
*/ */
~LoggerWorker(); ~LoggerWorker();
@@ -50,9 +50,11 @@ public:
void start(); void start();
/** /**
* @brief Отправляет сигнал завершения потоку записи. * @brief Останавливает обработку сообщений.
* *
* После обработки всех сообщений worker завершит работу. * После остановки очереди новые сообщения не принимаются.
* Рабочий поток завершится после обработки всех сообщений,
* которые уже находились в очереди.
*/ */
void stop(); void stop();
@@ -79,11 +81,6 @@ private:
* @brief Поток записи. * @brief Поток записи.
*/ */
std::thread workerThread_; std::thread workerThread_;
/**
* @brief Флаг работы потока.
*/
std::atomic<bool> running_{false};
}; };
} // namespace app } // 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