等待模拟时间 Omnet++

Wait simulation time 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 崩溃。我能做些什么来解决这个问题吗? 我还 post 发送回接收到的数据包的函数:

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()中,当您的自我消息发生时,从缓冲区中取出数据包并发送。