如何解决等待仿真时间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()
中,当发生自我消息传递时,从缓冲区中取出数据包并发送。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。