我必须向多个模块发送相同的消息。我使用了以下代码:
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");
在将消息发送到第一个模块并尝试发送到下一个模块后,我收到以下错误消息,消息已安排好,此时模拟停止。
我能得到什么建议吗?我会很感激的。
提前致谢。
答案 0 :(得分:2)
该消息不能多次发送。要将相同的消息发送到多个模块,每次必须创建此消息的副本。 dup()
是制作副本的便捷方法,例如:
cMessage *copyMsg = msg->dup();
sendDirect(copyMsg ,targetModule,"in");