如何从代码中停止模拟?

时间:2018-07-18 21:10:33

标签: omnet++

我希望我的模拟在满足代码中的特定条件后立即停止。 “停止”是指它应该暂停模拟,就像我在模拟窗口中按“停止”按钮一样。因此从现在起,我可以以较低的速度继续进行仿真。

是否可以通过模块代码来实现?

2 个答案:

答案 0 :(得分:2)

没有用于管理GUI运行状态的API。原因是,您也可以在Cmdenv中运行仿真而无需重新编译代码,并且暂停在Cmdenv中进行仿真是不可能的/毫无意义的。

但是您可以做个技巧,因为模拟是可重复的:

  • 添加一些代码,以在发生特定情况时打印出事件编号。
  • 运行模拟并记下运行模拟时打印出的事件编号。
  • 现在(使用相同的参数)再次开始仿真,但是使用“运行直到... /事件编号”并指定GUI应该停止的事件编号。

答案 1 :(得分:1)

alert()方法非常便于实现@Rudi技巧。
在GUI(运行,快速和快速)中,alert()暂停模拟,显示带有自己的文本的消息框,等待用户反应,然后以相同模式继续模拟。在Cmdenv中,它会在控制台中显示文本,而不会暂停模拟。
下面是使用此方法打印当前事件编号的示例代码:

char text[128];
sprintf(text,"Event number: %lld", getSimulation()->getEventNumber());
getSimulation()->getActiveEnvir()->alert(text);

在学习了此事件之后,第一位应该采取@Rudi在上一个项目符号中提出的建议。