OMNeT ++:快速'不同的结果或者'表达'模式

时间:2017-01-03 08:48:23

标签: omnet++ inet

已使用版本: OMNeT ++ 5.0 iNET 3.4.0

我创建了一些代码,在“逐步”或“动画”模拟模式下为我提供了可靠的结果。当我改为“快速”或“快速”模式时,它会变得越来越糟糕。以下简化示例将解释我的问题:

    void MyMacSlave::handleSelfMessage(cMessage *msg)
{
    if (msg == CheckAck) {
         std::cout << “CheckAck: “ << msg << std::endl;
    }

    if (msg == transmissionAnnouncement) {
         std::cout << “transmissionAnncouncement: “ << msg << std::endl;
    }

    if (msg == transmissionEvent) {
         std::cout << “transmissionEvent: “ << msg << std::endl;
    }

    delete msg;
}

有一个函数,用于处理自我消息。根据我得到的自我消息,我需要运行不同的查询。

我在逐步或动画模式下得到正确的输出:

CheckAck: (omnetpp::cMessage)CheckAck
transmissionAnncouncement: (omnetpp::cMessage)transmissionAnncouncement
transmissionEvent: (omnetpp::cMessage)transmissionEvent

这是我使用快速或快速模式获得的奇怪输出:

CheckAck: (omnetpp::cMessage)CheckAck
transmissionAnncouncement: (omnetpp::cMessage)transmissionAnncouncement
transmissionAnncouncement: (omnetpp::cMessage)transmissionEvent
transmissionEvent: (omnetpp::cMessage)transmissionEvent

第三个输出行显示自我消息为“ transmissionEvent ”,但'if(msg == transmissionAnnouncement)'被错误地视为真实

如上图所示,根据我使用的模拟模式,我会得到不同的模拟结果。产量不同的原因是什么?为什么会有差异呢?

1 个答案:

答案 0 :(得分:0)

Christoph和Rudi提到内存分配有问题。当指针被解除分配并且在同一存储器上分配新指针时,会出现问题。关于不同运行模式的使用的差异只是表明存在这种效果的错误。

在我的情况下,检查消息类型(如

)很有用
    if (msg->getKind() == checkAckAckType) {

而不是原始qeustion中使用的方法。我使用简单的枚举来定义消息类型。