Программа перестает отвечать на запросы: OMNet++

Ниже приведен код файла C++ и .ned. У меня есть 3 модуля tic,tac и toc. Я хочу, чтобы сообщение проходило через каждый модуль только один раз, но после нескольких событий программа перестает отвечать? В частности, когда сообщение достигает toc после нескольких итераций! Если есть какой-либо другой обходной путь, пожалуйста, дайте мне знать. Извините, что я новичок.

 void Txc1::handleMessage(cMessage *msg)
    {
        counter++;
        int n= gateSize("out");
        int k = intuniform(0,gateSize("out")-1);
        cGate *arrivalGate = msg->getArrivalGate();
        cGate *depGate = msg ->getSenderGate();
        if(arrivalGate != NULL)
        {
        int gate = arrivalGate->getIndex();
        int gate_out = depGate ->getIndex();
        EV<<"Arrival Gate: "<<gate<<endl;
        EV<<"Departure Gate: "<<gate_out<<endl;
        if(n >= 2)
        {
        while(gate==k){
        k = gate_out;
        }
        }
        }
        else
        EV << "Forwarding message " << msg << " on port out[" << k << "]\n";
        send(msg, "out", k);
    }


-----.NED-------

simple Txc1
{
    gates:
        input in[];
        output out[];
}

network Tictoc1
{
    submodules:
        tic: Txc1;
        toc: Txc1;
        tac: Txc1;
    connections:
        tic.out++ --> {  delay = 100ms; } --> toc.in++;
        tic.in++ <-- {  delay = 100ms; } <-- toc.out++;
        toc.out++ --> {  delay = 100ms; } --> tac.in++;
        tac.in++ <-- {  delay = 100ms; } <-- toc.out++;
         tac.out++ --> {  delay = 100ms; } --> toc.in++;

        }

person Kamran    schedule 04.07.2012    source источник
comment
Я не знаком с OMNet++. В: Вы разместили этот вопрос на их сайте: omnetpp.org/home/how -использовать-этот-сайт?   -  person paulsm4    schedule 04.07.2012
comment
Спасибо, опубликую свой вопрос там :)   -  person Kamran    schedule 04.07.2012


Ответы (1)


Похоже, tic и toc будут вечно разговаривать друг с другом:

tic.out++ --> {  delay = 100ms; } --> toc.in++;
tic.in++ <-- {  delay = 100ms; } <-- toc.out++;

Так как ворота tic "out" сообщают воротам "in" toc, а ворота "out" toc сообщают воротам "in" toc, они будут просто ходить по кругу.

Я не понимаю, что вы пытаетесь сделать именно в исходном коде модуля. Я бы вернулся к проекту Example TicToc, который поставляется с последними версиями OMNeT++, и внимательно изучил, как соединения взаимодействуют друг с другом. Это больше, что вы хотели бы для соединений:

tic.out++ --> {  delay = 100ms; } --> toc.in++;
tac.in++ <-- {  delay = 100ms; } <-- toc.out++;
tac.out++ --> { delay = 100ms; } --> tic.in++;

Так что тик-так-так.

person upwards    schedule 01.03.2013