我将代码放在我的omnet ++项目中
cMessage *data=new cMessage("data");
for (i=0;i<3;i++)
{
cModule *target=getParentModule()->getSubmodule("host[i]");
sendDirect(data,target,"radioIn");
scheduleAt(simTime(),data);
cancelEvent(data);
}
但它显示错误目标模块指针为NULL。
我将无线节点配置为
simple wirelessnode
{
....
gates:
input radioIn @directIn;
}
答案 0 :(得分:3)
您的代码中存在许多错误:
getSubmodule()
方法的第二个参数;所以它应该是这样的:getSubmodule("host",i)
dup()
类有cMessage
方法,用于创建消息的新副本(新实例)。我建议在使用方法sendDirect()
之前制作副本,并在for
循环后删除备用原文。scheduleAt()
方法。我想您的意图是将data
消息发送到其他模块,因此必须从您的代码中删除scheduleAt()
。cancelEvent(data)
也必须删除。此方法从将来的事件集中删除自己的消息。刚刚发送了data
消息,因此您无法将其删除。更正的代码:
cMessage *data = new cMessage("data");
for (i = 0; i < 3; i++)
{
cModule *target = getParentModule()->getSubmodule("host", i);
cMessage *dataCopy = data->dup();
sendDirect(dataCopy, target, "radioIn");
}
delete data; // removing an original message