等待仿真时间Omnet ++

问题描述

我需要修改UdpEchoApp(来自Inet包),以便在它发送回数据包之前,它等待“ x”秒的仿真时间。我尝试做类似的事情:

simtime_t before;
//something to calculate
simtime_t after;
if (after-before > x) {continue}
else {do something and then recalculate after}

但是这使Qtenv崩溃。有什么我可以解决的问题吗? 我还发布了发送回接收到的数据包的函数:

void UdpEchoApp::socketDataArrived(UdpSocket *socket,Packet *pk)
{
    // determine its source address/port
    L3Address remoteAddress = pk->getTag<L3AddressInd>()->getSrcAddress();
    int srcPort = pk->getTag<L4PortInd>()->getSrcPort();
    pk->clearTags();
    pk->trim();

    // statistics
    numEchoed++;
    emit(packetSentSignal,pk);
    // send back
    socket->sendTo(pk,remoteAddress,srcPort);
}

谢谢

解决方法

您的代码有误:模拟环境会根据传入事件增加模拟时间。换句话说,可以在定义模块行为的标准方法外部之外修改仿真时间。
要在模拟过程中模拟延迟,必须使用自消息。
简而言之:

  1. socketDataArrived()中:
  • 记住要发送的数据包,并将remoteAddress留在缓冲区中,
  • x秒后安排一次自我消息(使用scheduleAt())。
  1. handleMessageWhenUp()中,当发生自我消息传递时,从缓冲区中取出数据包并发送。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...