![](/img/trans.png)
[英]Change/set new position of a node during the simulation time in 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 崩溃。 我能做些什么来解决这个问题吗? 我还发布了发回接收到的数据包的函数:
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);
}
谢谢
您的代码是错误的:根据传入事件,模拟环境会增加模拟时间。 换句话说,在定义模块行为的标准方法之外修改模拟时间。
要在模拟过程中模拟延迟,必须使用自我消息。
简而言之:
socketDataArrived()
:remoteAddress
,x
秒后安排一条自我消息(使用scheduleAt()
)。handleMessageWhenUp()
当您的 selfmessage 发生时,从缓冲区中取出数据包并将其发送。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.