Omnet++ 只发送一次消息,而不是定期发送
我已经开发了一个场景,在该场景中,首先车辆发送一条自我信息,在收到自我信息后,车辆向RSU发送一条信息 自我消息代码写入Omnet++ 只发送一次消息,而不是定期发送,omnet++,veins,Omnet++,Veins,我已经开发了一个场景,在该场景中,首先车辆发送一条自我信息,在收到自我信息后,车辆向RSU发送一条信息 自我消息代码写入initialize()方法。但在模拟过程中,车辆每秒向RSU发送一次信息 我希望这个消息只发送一次。我该怎么办? 我已经附加了我的TraCIDemo11p.cc类的handleSelfmessage方法 if(msg->isSelfMessage()==true) { cModule*tmpMobility=getParentModule()->getSubmodule(“v
initialize()
方法。但在模拟过程中,车辆每秒向RSU发送一次信息
我希望这个消息只发送一次。我该怎么办?
我已经附加了我的TraCIDemo11p.cc类的handleSelfmessage方法
if(msg->isSelfMessage()==true)
{
cModule*tmpMobility=getParentModule()->getSubmodule(“veinsmobility”);
机动性=动态施法(TMP机动性);
断言(流动性);
信道信道=数据信道?类型信道:类型CCH;
WaveShortMessage*wsm=prepareWSM(“数据”,数据长度位,通道,数据优先级,-1,2);
wsm->setSenderAddress(我的地址);
wsm->setRecipientAddress(1001);
sendMessage(wsm->getWsmData());
}
您的方法似乎是正确的,但很明显,您的实现中存在一些问题
或者,您可以创建一条新消息并将其发送给自己
myOneTimeMsg = new cMessage("OneTimeMsg");
scheduleAt(simTime()+1.0, myOneTimeMsg); // this will send the message at t=currentTime+1.0 seconds
然后,您可以按如下方式处理该消息:
if(msg->isSelfMessage()==true){
if (msg == myOneTimeMsg) {
// do what you need next...
您的方法似乎是正确的,但显然在实现中存在一些问题 或者,您可以创建一条新消息并将其发送给自己
myOneTimeMsg = new cMessage("OneTimeMsg");
scheduleAt(simTime()+1.0, myOneTimeMsg); // this will send the message at t=currentTime+1.0 seconds
然后,您可以按如下方式处理该消息:
if(msg->isSelfMessage()==true){
if (msg == myOneTimeMsg) {
// do what you need next...
修改@user4786271的答案:
显然,此模块接收的每个自我消息(可能也是非WSM)都会执行的
handleSelfMsg
方法。因此,如果您只是在那里添加了给定的代码,它将为每个自我消息发送一个WSM。因此,仅检查自我消息类型是不够的。您需要创建一个新的消息类型并检查该类型,如@user4786271所示。修改@user4786271的答案:
显然,此模块接收的每个自我消息(可能也是非WSM)都会执行的
handleSelfMsg
方法。因此,如果您只是在那里添加了给定的代码,它将为每个自我消息发送一个WSM。因此,仅检查自我消息类型是不够的。您需要创建一个新的消息类型,并检查该类型,如@user4786271所示。包括initialize()
函数的代码。您将该代码放在了哪里?它是否在的handleSelfMsg
中?是否回答了此问题?将initialize()
函数的代码包括在内。您将此代码放在了哪里?是否在的handleSelfMsg
中?是否回答了此问题?