如何使用模拟时间触发模块中的动作?

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 {
   // ...
}