如何解决如何控制数据包的生成速率和发送间隔
我正在尝试创建一个UDP应用程序,在该应用程序中可以单独控制数据包的生成速率和数据包发送间隔。
我的代码在https://github.com/11187162/udpApp
中scheduleAt():消息(omnetpp :: cmessage)sendTimer当前为 已安排,请在模块重新安排之前使用cancelEvent() (inet :: UdpOwnApp)SensorNetworkShowcaseA.sensor3.app [0](id = 176),在 t = 0.058384669093s,事件#10
handleMessageWhenUp()的代码如下。
void UdpOwnApp::handleMessageWhenUp(cmessage *msg)
{
if (msg->isSelfMessage()) {
ASSERT(msg == selfMsg);
switch (selfMsg->getKind()) {
case START:
processstart();
break;
case GENERATE:
generatePacket();
break;
case SEND:
processSend();
break;
case STOP:
processstop();
break;
default:
throw cRuntimeError("Invalid kind %d in self message",(int)selfMsg->getKind());
}
}
else
socket.processMessage(msg);
}
有人可以帮助我吗?
谢谢
解决方法
您已经写过“可以分别控制生成速率和数据包发送间隔” ,但是您使用相同的自消息来控制数据包的生成以及发送数据包。安排了自我消息后,便无法再进行安排。
考虑添加新的自消息以生成数据包。
顺便说一句:numGenerate
设置为零,并且永远不会更改。
编辑
假设selfMsg1
用于生成数据包,则只能使用以下代码:
void UdpOwnApp::handleMessageWhenUp(cMessage *msg) {
if (msg->isSelfMessage()) {
if (msg == selfMsg) {
switch (selfMsg->getKind()) {
case START:
processStart();
break;
case SEND:
processSend();
break;
case STOP:
processStop();
break;
default:
throw cRuntimeError("Invalid kind %d in self message",(int)selfMsg->getKind());
}
} else if (msg == selfMsg1) {
if (selfMsg1->getKind() == GENERATE) {
generatePacket();
}
}
}
else
socket.processMessage(msg);
}
在initialize()
中,您应该创建selfMsg1
的实例。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。