等待模拟时间 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);
}
谢谢
您的代码错误:模拟环境根据传入事件增加了模拟时间。换句话说,模拟时间被修改在定义模块行为的标准方法之外。
要在模拟过程中模拟延迟,必须使用自我消息。
简而言之:
- 在
socketDataArrived()
中:
- 记住要发送的数据包并
remoteAddress
在缓冲区中,
- 安排
x
秒后发送自我消息(使用 scheduleAt()
)。
- 在
handleMessageWhenUp()
中,当您的自我消息发生时,从缓冲区中取出数据包并发送。
我需要修改 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);
}
谢谢
您的代码错误:模拟环境根据传入事件增加了模拟时间。换句话说,模拟时间被修改在定义模块行为的标准方法之外。
要在模拟过程中模拟延迟,必须使用自我消息。
简而言之:
- 在
socketDataArrived()
中:
- 记住要发送的数据包并
remoteAddress
在缓冲区中, - 安排
x
秒后发送自我消息(使用scheduleAt()
)。
- 在
handleMessageWhenUp()
中,当您的自我消息发生时,从缓冲区中取出数据包并发送。