修正一个alarm_service的map::at崩溃问题

This commit is contained in:
GuanYuankai 2025-10-24 08:51:47 +00:00
parent 28c8149491
commit f0e48fcb59
1 changed files with 15 additions and 2 deletions

View File

@ -138,12 +138,25 @@ void AlarmService::check_rule_against_value(AlarmRule& rule, double value, const
default: break; 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 (condition_met) {
// 条件满足 // 条件满足
if (state.current_state == AlarmStateType::NORMAL) { if (state.current_state == AlarmStateType::NORMAL) {
// 状态NORMAL -> PENDING
state.current_state = AlarmStateType::PENDING; state.current_state = AlarmStateType::PENDING;
if (rule.debounce_seconds <= 0) { if (rule.debounce_seconds <= 0) {