尝试使用 sendDirect 发送到多个模块时出现错误

时间:2021-01-25 06:14:40

标签: omnet++ inet

我必须向多个模块发送相同的消息。我使用了以下代码:

cMessage *msg=new cMessage("Broadcast");
msg->setKind(SENDTOALL);

cTopology topo;
topo.extractByModulePath(cStringTokenizer("**.router*.app[0]").asVector());

cTopology::Node *thisNode = topo.getNodeFor(this);

for (int i = 0; i < topo.getNumNodes(); i++) {
if (topo.getNode(i) == thisNode) continue; // skip ourselves


cModule *targetModule =topo.getNode(i)->getModule();

EV_INFO  << "Get Full Name ------------------- "<<i<< topo.getNode(i)->getModule()->getFullPath()<<endl;

sendDirect(msg,targetModule,"in");

在将消息发送到第一个模块并尝试发送到下一个模块后,我收到以下错误消息,消息已安排好,此时模拟停止。

enter image description here

我能得到什么建议吗?我会很感激的。

提前致谢。

1 个答案:

答案 0 :(得分:2)

该消息不能多次发送。要将相同的消息发送到多个模块,每次必须创建此消息的副本dup() 是制作副本的便捷方法,例如:

cMessage *copyMsg = msg->dup();
sendDirect(copyMsg ,targetModule,"in");

参考:Simulation Manual - Broadcasting messages