Omnet++ 只发送一次消息,而不是定期发送

Omnet++ 只发送一次消息,而不是定期发送,omnet++,veins,Omnet++,Veins,我已经开发了一个场景,在该场景中,首先车辆发送一条自我信息,在收到自我信息后,车辆向RSU发送一条信息 自我消息代码写入initialize()方法。但在模拟过程中,车辆每秒向RSU发送一次信息 我希望这个消息只发送一次。我该怎么办? 我已经附加了我的TraCIDemo11p.cc类的handleSelfmessage方法 if(msg->isSelfMessage()==true) { cModule*tmpMobility=getParentModule()->getSubmodule(“v

我已经开发了一个场景,在该场景中,首先车辆发送一条自我信息,在收到自我信息后,车辆向RSU发送一条信息

自我消息代码写入
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
中?是否回答了此问题?