如何访问Omnet ++中的其他类似模块

时间:2016-05-30 04:10:25

标签: c++ omnet++ inet

我在网络中使用多个Adhoc主机,我需要指向UDPApp.cc文件中网络中存在的所有adhoc主机。 如果我使用getParentModule(),我只能访问调用该应用程序的模块。 所以如果有3个主机 - > host1,host2和host3。 我只能访问host1,host 2,host 3,但是它是单独的。我想同时指向所有3个。

或指向包含它们的网络的指针。

1 个答案:

答案 0 :(得分:3)

您可以使用任何模块中的getModuleByPath(path)在整个模拟网络中查找具有指示名称和路径的模块。
一个示例(假设有10个主机):

for (int i = 0; i < 9; ++i) {
    char buf[20];
    sprintf(buf, "host%d", i);
    cModule * mod = getModuleByPath(buf);
    if (mod != nullptr) {
       // ... 
       // now mod contains the pointer to another host's module
    } else {
        EV << "No module " << buf << endl;
    }
}

修改
假设每个AdHoc主机都有一个名为manetrouting的子模块,可以使用更通用的解决方案:

cModule *network = cSimulation::getActiveSimulation()->getSystemModule();
for (SubmoduleIterator it(network); !it.end(); ++it) {
    cModule * mod = *it;
    if (mod->getSubmodule("manetrouting") != nullptr) {
        // check whether it is the same host
        if (this != mod && getParentModule() != mod) {
           EV << "Host " << mod->getName() << " is anther AdHoc host (not itself)" << endl;
        }
    } 
}

添加了一个附加条件,以省略在结果中涉及此代码的主机。