把 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\n";
send(tictocMsg, "out");
tictocMsg = nullptr;
}
else {
// "Lose" the message with 0.1 probability:
k = uniform(0, 1);
EV << k;
if (k < 0.1) {
EV << "\n\"Losing\" message\n"<< k;
delete msg;
}
else {
// The "delayTime" module parameter can be set to values like
// "exponential(5)" (tictoc7.ned, omnetpp.ini), and then here
// we'll get a different delay every time.
simtime_t delay = par("delayTime");
EV << "\nMessage arrived, starting to wait " << delay << " secs...\n";
tictocMsg = msg;
scheduleAt(simTime()+delay, event);
}
}
}
\"Losing\"
可以输出 “Losing”。