在OMNET ++中接收到来自上一个模块的所有消息之后,如何向下一个模块发送一个味精

时间:2019-05-27 14:39:08

标签: c++ simulation omnet++

需要您的帮助。

我有三个模块A,B和C。

模块A向模块B发送20条消息。我想在收到来自模块A的所有20条消息后向模块C发送一个数据包。我该如何处理handleMessage上的这种情况?

目前,它像一个循环一样运行。每次到达时都会发送一个味精。我需要的是从上一个模块收集所有消息,从中收集数据,准备一条消息,然后向下一个模块发送一个味精。

================================================ ==

感谢000102

您的第一个解决方案运行良好。我只是在努力解决第二个问题。所以请帮我请检查以下代码,让我知道我错了。

class ModuleB: public cSimpleModule
{
protected:
    virtual void initialize() override;
    virtual void handleMessage(cMessage *msg) override;
private:
    bool sentMessage = false;
    simtime_t lastMessageReceivedAt;
    simtime_t timer;
};

void ModuleB::initialize()
{

}

void ModuleB::handleMessage(cMessage *msg)
{
       if(simTime() - lastMessageReceivedAt >= timer && sentMessage == false)
            {
                 EV << counter << " messages to receive before sending.\n";
                // Data collection
            }
            else
            {
                lastMessageReceivedAt = simTime();
                EV << " Send message to Module C.\n";
                cMessage *newMsg = new cMessage("Message")
                send(newMsg, "out");
                sentMessage = true;
            }
}

1 个答案:

答案 0 :(得分:2)

我认为您正在寻找这样的东西:

class ModuleB : public cSimpleModule {
  private:
    int counter;

  protected:
    virtual void initialize() override;
    virtual void handleMessage(cMessage *msg) override;
};

void ModuleB::initialize() {
    counter = 20;
}

void ModuleB::handleMessage(cMessage *msg) {
    counter--;
    if (counter > 0) {
        EV << counter << " messages to receive before sending.\n";
        // Data collection
    }
    else {
        EV << " Send message to Module C.\n";
        cMessage *newMsg = new cMessage("Message")
        send(newMsg, "out");
    }
}