Init public repo

This commit is contained in:
2026-08-13 14:35:01 +07:00
commit 83161921a1
14 changed files with 399 additions and 0 deletions
+11
View File
@@ -0,0 +1,11 @@
#pragma once
#include "../../Saver/ISaver.h"
class ISaveThread
{
public:
virtual ~ISaveThread() = default;
virtual void save(const std::string& msg, ISaver::ImportanceMessage importance) = 0;
};
+46
View File
@@ -0,0 +1,46 @@
#include "SaveThread.h"
#include <chrono>
#include <iostream>
SaveThread::SaveThread(SaverLib& saver) : saver_(saver)
{
is_runing_.store(true);
save_thread_ = std::make_unique<std::thread>([this] { SaveThreadMethod(); });
}
void SaveThread::SaveThreadMethod()
{
// поток может завершится только если не будет сообщений в очереди, иначе он сначала все сохранит
while(is_runing_.load() || queue_.empty() == false)
{
// Небольшая задержка для разгрузки CPU
std::this_thread::sleep_for(std::chrono::milliseconds(100));
std::scoped_lock lock(m_queue_);
if (queue_.empty())
continue;
Msg msg = queue_.front();
try {
saver_->save(msg.msg, msg.importance);
queue_.pop_front();
} catch (const std::exception& e) {
std::cerr << e.what() << '\n';
std::this_thread::sleep_for(std::chrono::milliseconds(500));
continue;
}
}
}
SaveThread::~SaveThread()
{
is_runing_.store(false);
save_thread_->join();
}
void SaveThread::save(const std::string& msg, ISaver::ImportanceMessage importance)
{
std::scoped_lock lock(m_queue_);
queue_.push_back(Msg {msg, importance});
}
+35
View File
@@ -0,0 +1,35 @@
#pragma once
#include "ISaveThread.h"
#include "../SaverLib.h"
#include <thread>
#include <atomic>
#include <mutex>
#include <list>
#include <memory>
class SaveThread : public ISaveThread
{
struct Msg
{
std::string msg;
ISaver::ImportanceMessage importance;
};
SaverLib& saver_;
std::list<Msg> queue_;
std::mutex m_queue_;
/*
* Поток сохранения логов
*/
std::unique_ptr<std::thread> save_thread_;
void SaveThreadMethod();
std::atomic_bool is_runing_;
public:
SaveThread(SaverLib& saver);
~SaveThread();
void save(const std::string& msg, ISaver::ImportanceMessage importance) override;
};