声明全局变量并定期检查某些内容的最佳位置在哪里?
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 的建议。
我的模拟由一个移动节点和三个接入点组成,我想根据每个接入点检测移动节点的方向, 我知道怎么计算,但是移动节点的位置会随着时间变化...
我想保存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 的建议。