Время ожидания моделирования Omnet

#c #time #udp #simulation #omnet

#c #время #udp #Симуляция #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:

Ваш код неверен: время моделирования увеличивается средой моделирования в соответствии с входящими событиями. Другими словами, время моделирования изменяется вне стандартных методов, которые определяют поведение модуля.
Чтобы имитировать задержку во время моделирования, нужно использовать selfmessage.
Короче говоря:

  1. В socketDataArrived() :
  • запомнить пакет для отправки и remoteAddress в буфере,
  • запланируйте отправку сообщения x секундами позже (используя scheduleAt() ).
  1. В handleMessageWhenUp() когда произойдет ваше самосообщение, извлеките пакет из буфера и отправьте его.