我正在使用这个模块层次结构:
Node: {udpApp[0]<->udp<->networkLayer->wlan[0]} and wlan[0]: {CNPCBeacon<->mac<->radio}
使用 udpApp 的一些 ini 参数作为: 我在 udpApp 的 ini 文件中给出了一些初始参数:
**.host*.numUdpApps = 2
**.host*.udpApp[0].typename = "UDPBasicApp"
**.host*.udpApp[0].destAddresses = "gw1"
**.host*.udpApp[0].startTime = 1.32s
**.host*.udpApp[0].stopTime = 1.48s
但在运行时,我想通过 CNPCBeacon 模块更改 udpAPP[0] 的 startTime 和 stopTime 。
因此,我将 CNPCBeacon.cc 更改为:-
cModule* parentmod = getParentModule();
cModule* grantParentmod = parentmod->getParentModule();
cModule* udpmod = grantParentmod->getSubmodule("udpApp",0);
double varHoldingStartTime = udpmod->par("startTime").doubleValue();
double varGoldingStopTime = udpmod->par("stopTime").doubleValue();
varHoldingStartTime = SIMTIME_DBL(4.2);
varGoldingStopTime = SIMTIME_DBL(4.5);
udpmod->par("startTime").setDoubleValue(varHoldingStartTime);
udpmod->par("stopTime").setDoubleValue(varGoldingStopTime);
EV<<"New start and stop time is "<<udpmod->par("startTime").str()<<"\t"<<udpmod->par("stopTime").str()<<endl;`
其中成功更改了参数。但是它不会udpApp[0]
再次启动模块。所以我尝试使用这个模块的动态转换:
UDPBasicApp* udpBasicMod = dynamic_cast<UDPBasicApp*>(udpmod);
sendTimer = new cMessage("sendTimer");
scheduleAt(iniSchduleTime, sendTimer);
并导致以下错误:-
模块 (CNPCBeacon) BSoneNode.gw1.wlan[0].CNPCBeacon (id=23) 在事件 #1496 中出错,t=4:在上下文中调用模块 (UDPBasicApp)BSoneNode.gw1.udpApp[0] 的 scheduleAt()模块 (CNPCBeacon)BSoneNode.gw1.wlan[0].CNPCBeacon:从后一个模块调用的方法缺少 Enter_Method() 或 Enter_Method_Silent()?
还有其他方法可以通过其他子模块实例化模块吗?
感谢您的帮助。