我的模拟由一个移动节点和三个接入点组成,我想根据每个接入点检测移动节点的方向,我知道如何计算它,但是移动节点的位置会随时间变化......
我想在 1 秒前保存移动节点的最后位置..或每隔一秒定期检查一次,问题是放置我的代码以保证每秒执行一次的最佳位置....第二件事是哪个源代码文件最好声明全局变量?任何帮助高度赞赏...
假设您使用的是 INET(您的问题中没有提到):
存储/计算节点速度的最佳位置就在移动模块内部,该模块已经有一个定期更新计时器,但为什么需要计算它呢?该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 的建议。