From f0e48fcb59366b8c36a7b4a372358f7ee28dcaa6 Mon Sep 17 00:00:00 2001 From: GuanYuankai Date: Fri, 24 Oct 2025 08:51:47 +0000 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E4=B8=80=E4=B8=AAalarm=5Fser?= =?UTF-8?q?vice=E7=9A=84map::at=E5=B4=A9=E6=BA=83=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/alarm/alarm_service.cc | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/alarm/alarm_service.cc b/src/alarm/alarm_service.cc index 95353e1..6a8d018 100644 --- a/src/alarm/alarm_service.cc +++ b/src/alarm/alarm_service.cc @@ -138,12 +138,25 @@ void AlarmService::check_rule_against_value(AlarmRule& rule, double value, const default: break; } - AlarmState& state = m_alarm_states.at(rule.rule_id); + +auto it = m_alarm_states.find(rule.rule_id); + +if (it == m_alarm_states.end()) { + spdlog::warn("AlarmState for rule '{}' was missing. Creating it on-the-fly.", rule.rule_id); + + auto result = m_alarm_states.emplace( + std::piecewise_construct, + std::forward_as_tuple(rule.rule_id), + std::forward_as_tuple(m_io_context) + ); + it = result.first; // 'it' 现在指向新创建的元素 +} + +AlarmState& state = it->second; if (condition_met) { // 条件满足 if (state.current_state == AlarmStateType::NORMAL) { - // 状态:NORMAL -> PENDING state.current_state = AlarmStateType::PENDING; if (rule.debounce_seconds <= 0) {