声明全局变量并定期检查某些内容的最佳位置在哪里?

where is the best place to declare global variables, and checking something periodically?

我的模拟由一个移动节点和三个接入点组成,我想根据每个接入点检测移动节点的方向, 我知道怎么计算,但是移动节点的位置会随着时间变化...

我想保存1秒前移动节点的最后位置..或者每隔一秒定期检查一次,问题是我的代码最好放在哪里保证每秒执行一次... . 第二件事是哪个源代码文件更适合声明全局变量? 非常感谢任何帮助...

假设您正在使用 INET(您的问题中未提及):

store/calculate节点速度的最佳位置就在移动模块内部,它已经有一个定期更新计时器,但为什么你需要计算它呢? IMobility界面已经有getCurrentAngularPosition()getCurrentSpeed()所以你可以随时获取移动的方向和节点速度的绝对值,就像你可以获取节点的位置。您应该检查您实际使用的移动模型是否实现了这些功能。如果没有,您应该在那里实现它们。

您可以利用每个节点为自己调度的周期性消息调度。放在initialize()的最后阶段就可以了。

您可以按照以下方式进行操作:

void initialize(int stage)
{
    if (stage == 3)
    {
        cMessage *pMsg = new cMessage("myPeriodicMessage");
        scheduleAt(simTime()+1.0, pMsg);
    }
}

然后在handleMessage()有:

void handleMessage(cMessage *msg)
{
    if (msg->isSelfMessage())
    {
       /* if you have different selfMessages, compare them like below, or use different message kinds and checks accordingly */
       if (strcmp("myPeriodicMessage", msg->getName())==0)
       {
            doPeriodicTaks();
            scheduleAt(simTime()+1.0, pMsg);
       }
    }
}

请注意,通过这种方式,您将分别获得每个节点所需的信息。如果你想以集中的方式拥有它,你应该遵循@Rudi 的建议。