Как мой RSU может вызывать функцию через определенные промежутки времени в венах? - PullRequest
1 голос
/ 10 июля 2019

В настоящее время я работаю над алгоритмом на венах 4.7.1, где много транспортных средств и RSU отправляют и получают сообщения.

Я бы хотел, чтобы теперь мой RSU выполнял периодические вычисления независимо от того, отправил ли он сообщение или получил его. Проблема в том, что я не знаю, как и где реализовать эти периодические вычисления в моем приложении RSU.

Моей первой попыткой было осуществить вычисления в одной из функций, предусмотренных в BaseWaveApplLayer. Я думал о добавлении их в handlePositionUpdate(cObject* obj) с таймером, но я явно не могу использовать эту функцию в приложении RSU.

Любая помощь будет очень признательна.

1 Ответ

1 голос
/ 12 июля 2019

Я наконец решил свою проблему благодаря комментарию Ventu .Я просто создал встроенный тип сообщения wsm в BaseApplLayer.h и реализовал следующий код в TraCIDemoRSU11p.cc

void TraCIDemoRSU11p::initialize(int stage) {
    MyBaseWaveApplLayer::initialize(stage);
    if (stage == 0) {       // Members and pointers initialization       
    }
    else if (stage == 1) {  // Members that require initialized other modules           
        // Message Scheduling
        scheduleAt(simTime(), sendSelfMsgEvt);
    }
}

void TraCIDemoRSU11p::handleSelfMsg(cMessage* msg) {
    switch (msg->getKind()) {
    case SELF_MSG_EVT: {
        std::cout << "RSU Self Message received at " << simTime().dbl() << std::endl;  
        // Perform Calculations
        // ...

        // Self Message sending:
        scheduleAt(simTime() + PERIOD, sendSelfMsgEvt);
        break;
    }
    default: {
        if (msg)
            DBG_APP << "APP: Error: Got Self Message of unknown kind! Name: "
                << msg->getName() << endl;
        break;
    }
    }
}
...