0

以下は、C++ と .ned ファイルのコードです。tic、tac、toc の 3 つのモジュールがあります。メッセージが各モジュールを 1 回だけ通過するようにしたいのですが、いくつかのイベントの後、プログラムが応答しなくなりますか? 具体的には、数回繰り返した後、メッセージが 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++;

        }
4

1 に答える 1

1

tic と toc は永遠にお互いに話し合うように見えます:

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

tic の "out" ゲートが toc の "in" ゲートにメッセージを送信し、toc の "out" ゲートが toc の "in" ゲートにメッセージを送信するように、円を描くように移動します。

モジュールのソースコードで何をしようとしているのか正確にはわかりません。最新の OMNeT++ バージョンに付属する Example TicToc プロジェクトに戻り、接続がどのように相互に通信するかを詳しく調べます。これは、接続に必要なものです。

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

つまり、tic - toc - tac になります。

于 2013-03-01T12:45:55.457 に答える