gpt4 book ai didi

omnet++ - 什么时候在 OMNet++ 中使用 send、sendDirect 和 sendDelayed?

转载 作者:行者123 更新时间:2023-12-05 01:20:01 27 4
gpt4 key购买 nike

我正在 omnet++ 中构建自己的复合模块,其中包含多个简单模块并具有分层架构。但是在模块间通信中仅使用 send()(就像我的 App 生成器使用 send() 将数据包发送到下方缓冲区)似乎增加了总网络延迟。

此外,我还看到其他得到很好支持的模型,如 inet、mixim 等。交替使用 sendDirect 和 send 和 sendDelayed。

所以,我的问题是,何时使用 send()sendDirect()sendDelayed()?它们有任何延迟差异吗?

最佳答案

有几种方法可以在模块之间交换信息。您使用哪一个实际上取决于您传递的数据以及该交换与协议(protocol)本身相关的程度。

首先澄清一下:使用send()sendDirect() NOT 不会增加延迟。如果您通过正常 channel 发送消息或使用 sendDirect()该消息将在当前模拟时间(即现在)传递到目标模块。当消息在目的地被处理时,仿真叉将是相同的,因此仿真时间没有额外的延迟。 sendDelayed()显然会增加延迟,但这无论如何是它的主要目的。

您必须决定是要使用消息传递作为模块之间的通信方式(这是异步的)还是要直接调用另一个模块(这是同步的)。在第一种情况下,您可以使用 OMNeT++ 的调度函数(即 sendsendDelayedsendDirect 等)。在第二种情况下,您通常通过获取指向它的指针并可能使用 check_and_cast<> 将其转换为适当的类型来直接调用另一个模块。 .类似 getParentModule() 的方法和 findSubmodule()在这里可用于获取指向所需模块的指针。

当模块之间的通信被视为“实现”细节时,直接调用很有用。它也更快(就 CPU 使用率而言)和同步(因此您可以获得返回值)。

如果您在使用 GUI 运行时环境的模拟过程中传递要检查的数据(即,您想看到飞来飞去的小点),那么您应该使用消息定义和 send()/sendDirect()等等

最后,send()之间的区别和 sendDirect() .如果你有一个通过 channel 连接门的拓扑(即你现在提前通信路径)你通常使用 send() (例如有线网络)。如果您事先不知道通信路径,那么您通常会获得指向目标模块的指针,但之后您会使用 sendDirect() 发送异步消息。 .这通常是无线网络中的情况。

关于omnet++ - 什么时候在 OMNet++ 中使用 send、sendDirect 和 sendDelayed?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36080576/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com