菜单

DataSample.h 使用手册

下载

DataSample.h 使用手册

本文说明 src/op/DataSample.h 中的 SampleMgr 与 ExportSampleAndEventHelper。内容同时核对了 DataSample.cpp 的当前实现,因此“实现注意”比头文件注释更接近实际运行结果。

1. 适用范围与准备

命名空间为 stt::op,常用数据类型位于 stt::data。使用前必须保证 IRuntime、默认数据库、变量管理器和采样定义已经初始化。

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

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

SampleMgr 是进程级单例。第一次调用 getInstance(rt) 时传入的运行时对象会被保存,后续传入其他 rt 不会替换它。因此应在应用运行时稳定后初始化一次,并确保 rt 的生命周期覆盖所有采样任务。

2. SampleMgr API 总览

方法 作用 关键返回值或行为
getInstance 获取单例 首次传入的 IRuntime 生效
allSamples 查询全部采样定义 返回 SID、SNAME、STBL 表
pause / resume 暂停或恢复采样 空 SID 表示全部
deleteDB 删除日期范围内的数据或数据库文件 破坏性操作
getExportResult 取得最近一次异步导出结果 map<文件名, 状态文本>
isExporting 查询导出线程状态 无锁读取共享状态
deleteExpiredDB 清理过期的分日数据库 内部接口,有两个重载
destroy 清理静态容器 不会删除并重置单例
lock / unlock 锁定或解锁实时采样表 必须严格成对
locknav / unlocknav 锁定或解锁历史导航 必须严格成对
setFactorAndOffset 设置变量换算 采样值 = 实际值 × factor + offset
get 获取实时表或历史视图 实时结果为借用指针,历史结果为新对象
load 加载并启动采样任务 延时最少 5 秒
bind 绑定采样数据到控件 当前仅真正支持 STTTable
exportCSV 异步导出采样数据 路径与平台有关

3. 初始化与定义查询

3.1 getInstance

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

推荐在页面或业务对象初始化时保存指针:

cpp 复制代码
SampleMgr* samples = SampleMgr::getInstance(getRuntime());
if (samples == nullptr) {
    // 运行时尚未准备好
    return;
}

不要用不同 Runtime 反复调用并期待切换运行环境。当前实现只在首次创建单例时记录 rt。

3.2 allSamples

cpp 复制代码
static TTable allSamples();

返回表包含 SID、SNAME、STBL。适合填充采样选择列表:

cpp 复制代码
TTable defs = SampleMgr::allSamples();
for (int row = 0; row < defs.getRowCount(); ++row) {
    string sid   = defs.getValue(row, 0);
    string name  = defs.getValue(row, 1);
    string table = defs.getValue(row, 2);
    // 展示或缓存定义
}

默认数据库未初始化时不能可靠调用。

4. 加载、暂停与恢复

4.1 load

cpp 复制代码
bool load(int delay = 5);

load 从数据库读取采样定义并建立处理器。delay 单位为秒,小于 5 的值会被提升到 5。当前实现最终总是返回 true,不能仅凭返回值判断每条定义是否加载成功。

定义中的 MODE 位含义:

位 含义
bit 0 0 为周期采样,1 为触发采样
bit 1 置位时加载后自动启动
cpp 复制代码
最近修改: 2026-10-21Powered by