sendDirect()方法不起作用

时间:2015-08-24 10:30:35

标签: omnet++

我将代码放在我的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 个答案:

答案 0 :(得分:3)

您的代码中存在许多错误:

  1. 为了从主机向量中获取指向一个主机的指针,您应该指定一个数字作为getSubmodule()方法的第二个参数;所以它应该是这样的:
    getSubmodule("host",i)
  2. 你不能第二次发送同样的信息! dup()类有cMessage方法,用于创建消息的新副本(新实例)。我建议在使用方法sendDirect()之前制作副本,并在for循环后删除备用原文。
  3. 仅当您要将消息发送到同一模块时,才需要scheduleAt()方法。我想您的意图是将data消息发送到其他模块,因此必须从您的代码中删除scheduleAt()
  4. cancelEvent(data)也必须删除。此方法从将来的事件集中删除自己的消息。刚刚发送了data消息,因此您无法将其删除。
  5. 更正的代码:

    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