sendDirect () 方法不起作用

sendDirect () method not working

我在我的 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;
}

你的代码有很多错误:

  1. 为了从主机向量中获取指向一台主机的指针,您应该指定一个数字作为 getSubmodule() 方法的第二个参数;所以它应该是这样的:
    getSubmodule("host",i)
  2. 同一条信息不能发第二次! cMessage class 有 dup() 方法,可以创建消息的新副本(新实例)。我建议在使用方法 sendDirect() 之前制作一份副本,并在 for 循环之后删除备用原件。
  3. 仅当您要向同一模块发送消息时才需要scheduleAt() 方法。我猜你的意图是向其他模块发送 data 消息,所以 scheduleAt() 必须从你的代码中删除。
  4. cancelEvent(data) 也必须删除。此方法从未来事件集中删除 own 消息。 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