是否可以知道是哪个输入门触发了Omnet++的handleMessage()方法?

Is it possible to know which input gate triggered the handleMessage() method of Omnet++?

我在 Omnet++ 中有一个简单的网络,其中较低级别的网络在一个门 (inLower) 中接收,而相同级别的网络数据在另一个门 ( ).

我正在使用 Omnet++ 的 handleMessage() 方法在收到消息时触发一些操作。有什么方法可以区分哪个输入门接收到消息吗?我知道我可以指定消息通过哪个输出门发送。

您可以获得给定 cMessage by using cMessage::getArrivalGate() 的到达门。

void handleMessage(cMessage *msg) {
    cGate *arrivalGate = msg->getArrivalGate();
    if (arrivalGate == gate("inMid")) {
        // do stuff
    } else {
        // or y'know
    }
}

上面的示例假定 inMid 是标量门的字符串标识符。如果你的门是矢量门,你可以先检查它是否有任何门(gateSize("inMid") > 0),然后获取它的基本门(cGate inMidBaseGate = gate("inMid", 0);)。然后您可以获得其基本 ID (auto inMidBaseId = inMidBaseGate.getBaseId()),您可以将其与到达门及其基本 ID (inMidBaseId == arrivalGate->getBaseId()) 进行比较。