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