2015-08-24 38 views
0

我把代碼在我OMNET ++項目作爲sendDirect()方法不工作

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; 
} 

回答

3

有很多錯誤,在你的代碼:

  1. 爲了從主機的載體,你應該表明一些獲取指向一個主機作爲getSubmodule()方法的第二個參數;所以它應該是這樣的:
    getSubmodule("host",i)
  2. 你不能再次發送相同的消息!對於cMessage類有一個dup()方法,它會創建消息的新副本(新實例)。我建議在使用方法sendDirect()之前製作副本並在for循環後刪除備用原件。
  3. 僅當您想要將消息發送到同一模塊時,scheduleAt()方法纔是必需的。我想你的意圖是發送data消息給其他模塊,所以scheduleAt()必須從你的代碼中刪除。
  4. 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