修正一个alarm_service的map::at崩溃问题
This commit is contained in:
parent
28c8149491
commit
f0e48fcb59
|
|
@ -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) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue