我将以 INET ->examples->manetrouting->dynamicNodeCreation 为例来回答我的问题。当我在 omnet 中运行此示例时,初始化后的第一个事件(在运行时)是 fixhost 的“beaconTimer”(在我的情况下是 meshtest.fixhost2[4].wlan[0].magmt )所以基本上它从 mgmt 开始子模块。(如果您在运行时检查任何单个节点的层次结构,它将是:-Delayunit -> wlan0 并在 wlan0 中再次为 mgmt->mac->radio。mgmt 的代码编写在 inet->source->linklayer- >ieee80211->mgmt->ieee80211MgmtAP.cc
现在在这个类的初始化函数中,有一个代码行scheduleAt(simTime()+uniform(0,beaconInterval) , beaconTimer)
。这里 uniform 是 Omnet 定义的均匀分布函数并给出一个随机值,beaconInterval 是下一个超帧开始的时间,beaconTimer 是一个消息。此函数为所有节点(分别由它们自己的管理模块)安排发送信标的随机时间。因此,无论哪个设备通过这个统一函数获得最低值,都会开始发送信标。其他设备也应遵循。
现在,如果我想以预先安排的方式发送信标,那么我将在同一模块中更改 handleTimer 函数,因为它为下一个事件提供 scheduleAt() 函数。