Отправлять сообщение только один раз, а не периодически

Я разработал сценарий, в котором сначала автомобили отправляют собственное сообщение, а после его получения автомобили отправляют сообщение в RSU.

Код собственного сообщения записывается в методе initialize(). Но во время моделирования автомобили отправляют сообщение в RSU каждую секунду.

Я хочу, чтобы сообщение было отправлено только один раз. Что я должен делать? Я прикрепил метод handleSelfmessage своего класса TraCIDemo11p.cc.

    if(msg->isSelfMessage()==true)
    {
        cModule *tmpMobility = getParentModule()->getSubmodule("veinsmobility");
        mobility = dynamic_cast<Veins::TraCIMobility*>(tmpMobility);
        ASSERT(mobility);
        t_channel channel = dataOnSch ? type_SCH : type_CCH;
        WaveShortMessage* wsm = prepareWSM("data", dataLengthBits, channel, dataPriority, -1,2);

        wsm->setSenderAddress(myAddress);
        wsm->setRecipientAddress(1001);
        sendMessage(wsm->getWsmData());
    }

person Tapu    schedule 03.04.2017    source источник
comment
также включите код для функции initialize()   -  person user4786271    schedule 03.04.2017
comment
Куда именно вы положили этот код? Находится ли он в пределах handleSelfMsg TraCIDemo11p.cc?   -  person Julian Heinovski    schedule 03.04.2017
comment
Есть ли ответ на этот вопрос?   -  person Julian Heinovski    schedule 22.07.2018


Ответы (2)


Ваш подход кажется правильным, но, очевидно, у вас есть проблемы с реализацией.

Как вариант, вы можете создать новое сообщение и отправить его самому себе.

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...
person user4786271    schedule 03.04.2017

Внесение изменений в ответ @ user4786271:

handleSelfMsg метод TraCIDemo11p. cc, очевидно, выполняется для каждого собственного сообщения, которое получает этот модуль - возможно, также не WSM. Поэтому, если вы просто добавили туда данный код, он будет отправлять WSM для каждого из этих сообщений. Таким образом, только проверки типа сообщения недостаточно. Вам нужно создать новый тип сообщения и проверить его, как показано @ user4786271.

person Julian Heinovski    schedule 03.04.2017