Omnet++ 在中的finish()函数中等待接收确认

Omnet++ 在中的finish()函数中等待接收确认,omnet++,veins,Omnet++,Veins,我使用OMNeT++-4.6、sumo-0.22.0和venves-4a2 在我的模拟中,我需要所有节点在离开模拟时发送消息到它们的目的地,在我的例子中,它们是RSU。问题在于,所有节点都在finish()函数中发送消息,但RSU没有接收到这些消息,因为每个节点都应该等待,然后才能访问通道,然后通道就会被破坏 我需要让每个节点在离开模拟时等待,直到接收到来自目的地的ACK。然后,当它收到所有发送消息的所有ACK时,它可以被销毁 那么,如何强制finish()函数中的每个节点等待确认呢?我需要一个

我使用OMNeT++-4.6、sumo-0.22.0和venves-4a2

在我的模拟中,我需要所有节点在离开模拟时发送消息到它们的目的地,在我的例子中,它们是RSU。问题在于,所有节点都在finish()函数中发送消息,但RSU没有接收到这些消息,因为每个节点都应该等待,然后才能访问通道,然后通道就会被破坏

我需要让每个节点在离开模拟时等待,直到接收到来自目的地的ACK。然后,当它收到所有发送消息的所有ACK时,它可以被销毁


那么,如何强制finish()函数中的每个节点等待确认呢?我需要一个帮助来完成这个场景。

根据
OMNeT++模拟手册

在模拟结束时为所有模块调用finish()

任何模块都无法接收在
finish()
中发送的消息,因为模拟正在结束,并且不会调用
handleMessage()


我建议(在特定时刻)引入一条自我信息,它将包含您想要做的动作。

感谢您的回复。我尝试使用scheduleAt,其中我在finish()函数中指定了一个delay,以等待消息被发送并且相应的节点收到一个ACK,但正如您所说的,handleMessage将不会被调用。您能告诉我如何使用finish()函数中的self message等待节点收到确认吗?我不知道该做什么,我真的需要在工作中这样做。你不能在
finish()
中使用自我信息。但是,您可以更早地使用selfmessages<代码>完成()
在模拟结束时调用。模拟在以下情况下结束:1)没有更多的事件(消息)要处理,或2)假定从
omnetpp.ini
经过simtime或cpu时间,或3)用户手动停止模拟。你能指出在你的模拟中发生了什么情况吗?在我的模拟中,第二种情况发生了。因此,当所有节点到达其目的地时调用finish()。我需要做的是,每个节点都到达目的地,在离开模拟之前,将其生成的所有其余消息发送到目的地,我在finish()方法中使用了sendMessage()函数,所有消息都已发送,但目的地未接收到。因此,作为一种解决方案,我需要强制每个节点在发送每个数据包时等待,直到它收到来自RSU的ACK。我不清楚您的评论。第二个条件意味着您在
omnetpp.ini
中设置了例如
sim time limit=3600s
——这是真的吗?当所有节点根据.rou.xml文件中的指示路径到达其目的地时,我的模拟结束。最后一个节点离开模拟然后模拟结束的时间是1433s,因此我在omnetpp.ini中设置了[sim time limit=1450s]。