是否可以知道是哪个输入门触发了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()
) 进行比较。
我在 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()
) 进行比较。