为什么 sendDelayed() 会增加发送 2 的幂的时间?
Why does sendDelayed() increase time of sending in powers of 2?
我真的是 Omnet++ 的新手,我不明白这些值是什么。为什么仿真时间以 2 的幂增加?
这是消息处理程序的代码:
void box::initialize() {
if(strcmp("box", getName()) == 0) {
packet1 *m = new packet1;
m->setName("message");
send(m, "out");
}
}
void box::handleMessage(cMessage *msg) {
if(strcmp(msg->getName(), "message") == 0) {
sendDelayed(msg,SIMTIME_DBL(simTime())+1,"out");
}
}
模拟时间值不应该是0然后1然后2吗?
注意,根据OMNeT++ Simulation Library API sendDelayed()
的第二个参数是延迟,而不是发送的绝对时间。此外,simTime()
returns 当前模拟时间。因此,您的代码按如下方式安排消息:
在 t = 0s - 在 t + 0 + 1 = 0 + 0 + 1 = 1s 的时间表
在 t = 1s - t + t + 1 = 1 + 1 + 1 = 3s 的时间表
在 t = 3s - t + t + 1 = 3 + 3 + 1 = 7s 的时间表
在 t = 7s - t + t + 1 = 7 + 7 + 1 = 15s 的时间表
....
其中 t 是模拟时间。
为了应用一秒延迟,应该写:
sendDelayed(msg, 1.0, "out");
我真的是 Omnet++ 的新手,我不明白这些值是什么。为什么仿真时间以 2 的幂增加?
这是消息处理程序的代码:
void box::initialize() {
if(strcmp("box", getName()) == 0) {
packet1 *m = new packet1;
m->setName("message");
send(m, "out");
}
}
void box::handleMessage(cMessage *msg) {
if(strcmp(msg->getName(), "message") == 0) {
sendDelayed(msg,SIMTIME_DBL(simTime())+1,"out");
}
}
模拟时间值不应该是0然后1然后2吗?
注意,根据OMNeT++ Simulation Library API sendDelayed()
的第二个参数是延迟,而不是发送的绝对时间。此外,simTime()
returns 当前模拟时间。因此,您的代码按如下方式安排消息:
在 t = 0s - 在 t + 0 + 1 = 0 + 0 + 1 = 1s 的时间表
在 t = 1s - t + t + 1 = 1 + 1 + 1 = 3s 的时间表
在 t = 3s - t + t + 1 = 3 + 3 + 1 = 7s 的时间表
在 t = 7s - t + t + 1 = 7 + 7 + 1 = 15s 的时间表
....
其中 t 是模拟时间。
为了应用一秒延迟,应该写:
sendDelayed(msg, 1.0, "out");