2017-01-26 3 views
0

実際にいくつかの宛先に送信するためにetherhost2関数を編集しようとしています。関数は、これら二つの機能のみ呼び出されるだけdestMACAddress = resolveDestMACAddress()と条件場合に二つの機能sendBurstPackets()scheduleNextPacket(simTime())を移動させることにより、正常に動作して、元のコードでOmnet ++:関数の場所を変更すると、期待通りに機能しませんでした。

一度。

これは、destMacAddressがシミュレーション全体を通して一度設定されることを意味しますか?

オリジナルコード

void EtherTrafGen::handleMessage(cMessage *msg) 
{ 
    if (!isNodeUp()) 
     throw cRuntimeError("Application is not running"); 
    if (msg->isSelfMessage()) { 
     if (msg->getKind() == START) { 
      destMACAddress = resolveDestMACAddress(); 
      // if no dest address given, nothing to do 
      if (destMACAddress.isUnspecified()) 
       return; 
     } 
     sendBurstPackets(); 
     scheduleNextPacket(simTime()); 
    } 
    else 
     receivePacket(check_and_cast<cPacket *>(msg)); 
} 

マイ変更

void EtherTrafGen::handleMessage(cMessage *msg) 
{ 
    if (!isNodeUp()) 
     throw cRuntimeError("Application is not running"); 
    if (msg->isSelfMessage()) { 
     if (msg->getKind() == START) { 
if (!multipacket) 
      { 
       destMACAddress = resolveDestMACAddress(); 
       sendBurstPackets(); 
       scheduleNextPacket(simTime()); 
      } 
      // if no dest address given, nothing to do 
      if (destMACAddress.isUnspecified()) 
       return; 
     } 
    } 
    else 
     receivePacket(check_and_cast<cPacket *>(msg)); 
} 

答えて

0

最初のメッセージが設定されたMACを意味する条件(msg-> getKind()== START)、のための唯一の真実でありますシミュレーション全体を通じて各ホストごとに1回。その状態を取り除くことでそれが機能しました。

この機能と間違えるかもしれない他の自己メッセージがあると心配です。私のシミュレーションにしか使えない別のEtherHostアプリを持っている方が良いでしょう。

すべての自己メッセージを見る方法がある場合は、私に知らせていただければ幸いです。

+1

通常、自己メッセージは対応する '.h'ファイルで定義され、ローカル変数(モジュールごとに1つのインスタンス)として管理されます。このプログラミングパターンは、定期的に物事を行うアプリケーション(ビーコンやトラフィックの生成など)に特によく使用されます。 –

関連する問題