#include "ThreadAlarmManager.h" #include "GlobalInfo.h" #include "spdlog.h" #include #include ThreadAlarmManager::~ThreadAlarmManager() { } /* 线程工作函数 */ void ThreadAlarmManager::thread_task() { /* 初始化信息 */ if(!initData()) { SPDLOG_LOGGER_ERROR(m_logger, "报警信息处理线程初始化数据失败"); return; } /* 设置标志位 */ m_isRunning = true; m_isStop = false; m_threadState = EThreadState::State_Running; SPDLOG_LOGGER_INFO(m_logger, "⚡ 报警信息处理线程开始运行"); /* 运行线程功能 */ task(); /* 清理数据 */ clearData(); m_threadState = EThreadState::State_Stopped; m_isStop = true; SPDLOG_LOGGER_WARN(m_logger, "⚡ 报警信息处理线程结束运行"); } /* 停止线程 */ void ThreadAlarmManager::thread_stop() { m_isRunning = false; // 设置线程停止标志位 } void ThreadAlarmManager::thread_stopBlock() { thread_stop(); while(m_threadState != EThreadState::State_Stopped) // 等待线程停止 { std::this_thread::sleep_for(std::chrono::milliseconds(1)); } } /* 添加报警内容 */ void ThreadAlarmManager::addAlarmInfo(const AlarmInfo_t& alarmInfo) { std::lock_guard lock(m_mutexListAlarm); m_listAlarm.push_back(alarmInfo); } void ThreadAlarmManager::addAlarmInfo(const std::list& listAlarm) { std::lock_guard lock(m_mutexListAlarm); m_listAlarm.insert(m_listAlarm.end(), listAlarm.begin(), listAlarm.end()); } /* 线程工作函数 */ void ThreadAlarmManager::task() { while(m_isRunning.load()) { std::this_thread::sleep_for(std::chrono::milliseconds(100)); // 每100毫秒执行一次 /* 检查列表是否有报警信息 */ { std::lock_guard lock(m_mutexListAlarm); if(m_listAlarm.empty()) { continue; // 如果没有报警信息,继续循环 } /* 处理报警信息,拼接报警文件字符串,拼接出报警文件 */ /* 写入数据库 */ if(!m_fromWebAPI.insertAlarmInfo(m_listAlarm)) { SPDLOG_LOGGER_ERROR(m_logger, "写入报警信息失败"); } /* 清空报警列表 */ m_listAlarm.clear(); } } } /* 初始化数据 */ bool ThreadAlarmManager::initData() { if(m_logger == nullptr) { m_logger = spdlog::get("Alarm"); if(m_logger == nullptr) { fmt::print("Alarm is nullptr"); return false; // 日志记录器获取失败 } } /* 登陆WebAPI */ if(!m_fromWebAPI.initWebApi(GInfo.webAPIUrl(), GInfo.webAPIID(), GInfo.appType())) { SPDLOG_LOGGER_ERROR(m_logger, "报警信息处理线程登录WebAPI失败"); return false; } SPDLOG_LOGGER_INFO(m_logger, "报警信息处理线程登录WebAPI成功"); return true; } /* 清理数据 */ void ThreadAlarmManager::clearData() { }