【问题标题】:Is it possible to know which input gate triggered the handleMessage() method of Omnet++?是否可以知道哪个输入门触发了 Omnet++ 的 handleMessage() 方法?
【发布时间】:2020-09-09 18:03:57
【问题描述】:

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

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

【问题讨论】:

    标签: networking simulation omnet++


    【解决方案1】:

    您可以使用cMessage::getArrivalGate() 获取给定cMessage 的到达门。

    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()) 进行比较。

    【讨论】:

    • 这适用于标量门;但是,我收到矢量门错误:“访问矢量门时未指定门索引”。如何指定此索引来修复错误,以及如何使其与来自哪个索引无关?
    • 啊,你叫inMid的门是向量门?您可以使用cGate::getBaseId() 并将其与cMessage::getArrivalGate()->getBaseId 进行比较,以检查它是否存在矢量门的任何门部分。
    猜你喜欢
    • 2022-01-19
    • 2020-08-11
    • 2012-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-07
    相关资源
    最近更新 更多