OMNeT 例程 Tictoc7 学习笔记

把 Tictoc6 的固定延迟时间 1s 设为随机值;删除概率小于 0.1 的数据包,也就是丢包率是 0.1。

在 ned 文件中加入这一行:

volatile double delayTime @unit(s);

delayTime是一个可变的变量,在 omnetpp.ini 中设置:

Tictoc7.tic.delayTime = exponential(3s)
Tictoc7.t0c.delayTime = truncnormal(3s,1s)

exponential() 参数为平均值,truncnormal() 将正态分布中的值截断为非负值。

为了方便理解代码,把 uniform(0,1) 的值输出:

void Txc7::handleMessage(cMessage *msg)
{
          
   
    double k = 0;
    if (msg == event) {
          
   
        EV << "Wait period is over, sending back message
";
        send(tictocMsg, "out");
        tictocMsg = nullptr;
    }
    else {
          
   
        // "Lose" the message with 0.1 probability:
        k = uniform(0, 1);
        EV << k;
        if (k < 0.1) {
          
   
            EV << "
"Losing" message
"<< k;
            delete msg;
        }
        else {
          
   
            // The "delayTime" module parameter can be set to values like
            // "exponential(5)" (tictoc7.ned, omnetpp.ini), and then here
            // well get a different delay every time.
            simtime_t delay = par("delayTime");

            EV << "
Message arrived, starting to wait " << delay << " secs...
";
            tictocMsg = msg;
            scheduleAt(simTime()+delay, event);
        }
    }
}

"Losing"可以输出 “Losing”。

经验分享 程序员 微信小程序 职场和发展