我在 OMNeT++ 4.4 中运行模拟,其中我的节点发出一个结果,该结果本质上是一个元组。元组的值是相互依赖的,所有节点都会发出它们;即,在单个 simtime 中发出了几个这样的元组。元组不能被“压缩”为单个 double 值。
我想将这些元组记录在一个 vector 中。有没有办法发出用于统计收集的数据结构并将其记录在 OMNeT++ 创建的 *.vec 文件中?我不关心 NED 文件中可用于此特定信号的统计函数。
举个简单的例子,假设我有
typedef boost::tuple<boost::DateTime, bool, Unit::Watt, Unit::VAr> MyTuple;
某处作为我要发出的信号的数据类型。有没有办法拥有
MyTuple myTuple( /* ... data ... */ );
emit(mySignal, myTuple);
在我的源代码中并将其记录在规则的 .vec
结果文件中,例如:
vector 1 MyNodeName MyResultVectorName TV
1 14.126 2013-01-22T23:22:19+10:00 true 125300 12000
如果不可能,仍然使用 OMNeT 的信号机制但自己创建输出文件的最佳方法是什么?
最佳答案
默认情况下 OMNeT++ 不能保存元组(因为内置工具无论如何都不能处理它),但是信号可以携带一个 cObject
,这与标量值的传输方式类似。从 cObject
派生你的元组,你将能够用信号发射它。显然,您还必须编写并注册一个可以处理给定数据类型并写入文件的 ResultRecorder(派生自 cResultRecorder
)。
关于c++ - 在 vector 结果记录器中记录元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38505614/