我的 omnet++ 模拟卡在一个循环中

My omnett++ simulation is stuck in a loop

每当我 运行 我的模拟时,最初在 rdrchk1 上创建的消息卡在两者之间 rdrchk1 和 rdrsucess1。 这是我的 C++ 代码:

#include <string.h>
#include <omnetpp.h>

using namespace omnetpp;


class rdr : public cSimpleModule
{
  protected:
    // The following redefined virtual function holds the algorithm.
    virtual void initialize() override;
    virtual void handleMessage(cMessage *msg) override;


};

// The module class needs to be registered with OMNeT++
Define_Module(rdr);

void rdr::initialize()
{
    int v1 = rand() % 100;
        int v2 = rand() % 100;
        int v3 = rand() % 100;
    if (strcmp("rdrchk1", getName()) == 0) {

        cMessage *msg = new cMessage("objectcheck");


     if (v1<78|| v2 < 82 || v3 <69){
         int n = 0;
         send(msg, "out", n);
     }
     else{
         int d=1;
                  send(msg, "out", d);

     }
    }

}

void rdr::handleMessage(cMessage *msg)
{

    int t = 0;
    send(msg, "out",t);


}

这是我的 NED 代码:

simple rdr
{
    parameters:
        @display("i=block/routing");
    gates:
        input in[4];
        output out[4];
}

//

network radr
{
    @display("bgb=356,232");
    submodules:
        rdrchk1: rdr {
            @display("p=85,67");
        }
        rdrfail1: rdr {
            @display("p=275,133;i=block/wheelbarrow");
        }
        rdrsucess1: rdr {
            @display("p=291,61");
        }
    connections allowunconnected:
        
        rdrchk1.out[1] --> rdrfail1.in++;
        rdrchk1.out[0] --> rdrsucess1.in++;
        rdrchk1.in[2] <-- rdrfail1.out++;
        rdrchk1.in[3] <-- rdrsucess1.out++;
                




}

我知道它被卡住了,因为每当我编辑我的代码以保证它下一步会转到 rdrfail1 时,它就会卡在 rdrchk1 和 rdrsucess1 之间。任何人都可以告诉我为什么这样做以及我可以做些什么来解决它。谢谢你的时间。

这是您的模型中发生的情况。

  1. rdrchk1initialize() 中创建了一条新消息。然后发送该消息:
    一种。当条件 if (v1<78|| v2 < 82 || v3 <69) 为真时 rdrsucess1

    b.到 rdrfail1 否则

  2. 如果rdrsucess1收到消息,它会立即将该消息发送到rdrchk1(因为在您的网络端口中,索引为outrdrsucess1 连接到 rdrchk1).

  3. 如果rdrfail1收到消息,它会立即将该消息发送到rdrchk1(因为在您的网络端口中,索引为outrdrfail1 连接到 rdrchk1).

  4. 然后rdrchk1收到消息并立即发送给rdrsucess1

然后第2点和第4点无限重复