菜单

EventMgr.h 使用手册

下载

EventMgr.h 使用手册

本文覆盖 src/op/EventMgr.h 中的 EventMgr、TimerMgr、OTAEvent,以及三个快捷宏。说明依据 EventMgr.cpp 和 internal/EventHelper.cpp 的当前实现整理。

1. 引入与初始化

cpp 复制代码
#include "op/EventMgr.h"

using namespace stt;
using namespace stt::op;
using namespace stt::data;

EventMgr 是进程级单例。构造时会启动一个 detach 的无限后台线程,用于刷新绑定视图及约每 60 秒提交事件数据库事务。因此必须先完成 Runtime、默认数据库、变量管理器和事件定义初始化,再首次调用 getInstance。

cpp 复制代码
EventMgr* events = EventMgr::getInstance(getRuntime());
events->load();

当前析构与 destroy 不会停止该后台线程。Runtime 和数据库对象必须比 EventMgr 的工作线程存活更久。

2. EventMgr API 总览

分类 API
单例与加载 getInstance、load、destroy
控件绑定 bind、bind2、rebind、release、drawData
事件控制 pause、resume、isPaused、setACCT、setACCE
显示配置 setDateMode、setDurationUnit、颜色和字体查询
确认 confirm、confirm2、confirmEvent、confirmWarn、setConfirmEID、getConfirmEID
导出 exportCSV 三组重载
删除 deleteDB 两组重载、deleteExpiredDB
数据库 getdb、commitThenBeginTrans

3. 加载与运行状态

3.1 getInstance

cpp 复制代码
static EventMgr* getInstance(IRuntime* rt);

首次 rt 生效。构造函数虽然只在部分位置检查数据库是否为空,后续仍会解引用数据库指针,所以不要用空 Runtime 或未初始化数据库调用。

3.2 load

cpp 复制代码
bool load();

load 会读取事件定义、创建事件处理器,并在数据库中重置累计次数、累计时间和状态,再重建运行状态。RVAR 为空的事件定义会被跳过。

cpp 复制代码
EventMgr* mgr = EventMgr::getInstance(getRuntime());
if (!mgr->load()) {
    // 检查默认数据库和事件定义
}

不要在页面切换时重复 load;它不是普通的“刷新显示”操作。

3.3 pause、resume 与 isPaused

cpp 复制代码
void pause(const string& eid = "");
void resume(const string& eid = "");
bool isPaused(const string& eid);
cpp 复制代码
mgr->pause("12");  // 暂停指定事件
mgr->resume("12");
mgr->pause();      // 空字符串作用于全部事件
mgr->resume();

isPaused 返回 false 既可能表示事件正在运行,也可能表示 EID 不存在。需要先保证 EID 来自有效事件定义。

3.4 setACCT 与 setACCE

cpp 复制代码
void setACCT(const string& eid, unsigned long long acct);
void setACCE(const string& eid, int acce);

分别设置指定事件的累计时间和累计次数。只更新已加载的事件处理器及其可选绑定变量,没有返回状态。

4. 绑定报警与事件数据

4.1 bind

cpp 复制代码
bool bind(
    STTWidget* widget,
最近修改: 2026-10-21Powered by