如何使用模拟时间触发模块中的动作?
How to use simulation time to triger action in modules?
我想用服务器和 2 个节点创建模拟。节点定义了包含转弯时间的向量 on/off。(例如 timersOnOff = 5,10,13,25 ...... nod 将在开始模拟的第 5 秒打开,然后将在第 10 秒关闭等)。如何在特定时间触发动作以将消息发送到节点 "turn on" 或 "turn off".?
让我们假设这些时间写在 timersOnOff
声明为:
std::vector<simtime_t> timersOnOff;
在initialize()
中添加以下代码:
for (int i = 0; i < timersOnOff.size(); i = i + 2) {
simtime_t timeOn = timersOnOff[i];
simtime_t timeOff = timersOnOff[i+1];
cMessage * msgOn = new cMessage("nodeOn"); // (1)
cMessage * msgOff = new cMessage("nodeOff"); // (2)
scheduleAt (timeOn, msgOn);
scheduleAt (timeOff, msgOff);
}
以上代码安排了所有的 ON 和 OFF 事件。
然后,在 handleMessage()
中添加:
if (msg->isSelfMessage()) {
if (msg->isName("nodeOn")) { // the same name as in (1)
delete msg;
// turning on the node
} else if (msg->isName("nodeOff")) { // the same name as in (2)
delete msg;
// turning off the node
}
} else {
// ...
}
我想用服务器和 2 个节点创建模拟。节点定义了包含转弯时间的向量 on/off。(例如 timersOnOff = 5,10,13,25 ...... nod 将在开始模拟的第 5 秒打开,然后将在第 10 秒关闭等)。如何在特定时间触发动作以将消息发送到节点 "turn on" 或 "turn off".?
让我们假设这些时间写在 timersOnOff
声明为:
std::vector<simtime_t> timersOnOff;
在initialize()
中添加以下代码:
for (int i = 0; i < timersOnOff.size(); i = i + 2) {
simtime_t timeOn = timersOnOff[i];
simtime_t timeOff = timersOnOff[i+1];
cMessage * msgOn = new cMessage("nodeOn"); // (1)
cMessage * msgOff = new cMessage("nodeOff"); // (2)
scheduleAt (timeOn, msgOn);
scheduleAt (timeOff, msgOff);
}
以上代码安排了所有的 ON 和 OFF 事件。
然后,在 handleMessage()
中添加:
if (msg->isSelfMessage()) {
if (msg->isName("nodeOn")) { // the same name as in (1)
delete msg;
// turning on the node
} else if (msg->isName("nodeOff")) { // the same name as in (2)
delete msg;
// turning off the node
}
} else {
// ...
}