feat(app): add graceful shutdown support to MessageQueue

This commit is contained in:
user
2026-07-21 12:42:38 +04:00
parent 3ac84cade2
commit 4552483a7e
3 changed files with 91 additions and 14 deletions
+25 -4
View File
@@ -2,6 +2,7 @@
#include <condition_variable>
#include <mutex>
#include <optional>
#include <queue>
#include "log_message.hpp"
@@ -22,6 +23,8 @@ public:
*
* Метод является потокобезопасным.
*
* После остановки очереди новые сообщения не принимаются.
*
* @param message Сообщение для передачи.
*/
void push(LogMessage message);
@@ -29,15 +32,28 @@ public:
/**
* @brief Извлекает сообщение из очереди.
*
* Если очередь пуста, метод блокирует вызывающий
* поток до появления нового сообщения.
* Если очередь пуста, метод блокирует вызывающий поток
* до появления нового сообщения или до остановки очереди.
*
* После остановки очереди и обработки всех оставшихся сообщений
* возвращается std::nullopt.
*
* Метод является потокобезопасным.
*
* @return Следующее сообщение из очереди.
* @return Следующее сообщение или std::nullopt, если очередь остановлена.
*/
[[nodiscard]]
LogMessage pop();
std::optional<LogMessage> pop();
/**
* @brief Останавливает очередь.
*
* Пробуждает все ожидающие потоки. После вызова stop()
* новые сообщения не принимаются.
*
* Метод является потокобезопасным.
*/
void stop();
/**
* @brief Проверяет, пуста ли очередь.
@@ -56,6 +72,11 @@ private:
*/
std::queue<LogMessage> queue_;
/**
* @brief Признак остановки очереди.
*/
bool stopped_{false};
/**
* @brief Мьютекс для синхронизации доступа к очереди.
*/