我使用Omnet ++并创建了一个发件人不断向发件人发送数据包(从发件人到接收方的单向通信)的情况,并且我已经在发送者和接收者的简单模块。如何在omnet ++中的模块上单独调用finish()
由于发送方的计数器首先比接收方倒数至零,模拟运行良好,但由于接收方完成所有操作,因此它不记录统计数据。
计数器减为零后,两个模块都调用finish()
函数。
sender::finish()
{
EV << "message limit reached \n";
cancelAndDelete(myEvent);
}
接收器的完成功能:
void receiver::finish()
{
EV << "mean: "<< iatStats.getMean() << endl;
EV << "std.dev: " << iatStats.getStddev() << endl;
EV << "variance: " << iatStats.getVariance() << endl;
iatStats.recordAs("Inter-Arrival Times");
recordScalar("#IAT", interAT_diff);
}
这里IAT是在接收数据包之间的到达间隔时间计算。
模拟运行后,发送者的finish()
被调用第一和模拟停止,并没有数据被记录在/results
文件夹只有空白.vec
或.sca
文件存在。
也端子说simulation fault: core dumped
的问题是我怎么能“暂停”发件人块一旦计数器运行,并让接收器调用它的finish()
函数,这样我可以看到的统计数据,并记录所有我需要的数据?
希望描述足够清楚。 谢谢
消息'模拟故障:核心转储'意味着模拟过程中出现**错误**。尝试调试您的模拟以确定哪条指令导致该错误。或者在你的问题中提出你的整个代码。 –
发现故障并发布了答案。 :) –