我在网络中使用多个Adhoc主机,我需要指向UDPApp.cc文件中网络中存在的所有adhoc主机。 如果我使用getParentModule(),我只能访问调用该应用程序的模块。 所以如果有3个主机 - > host1,host2和host3。 我只能访问host1,host 2,host 3,但是它是单独的。我想同时指向所有3个。
或指向包含它们的网络的指针。
答案 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;
}
}
}
添加了一个附加条件,以省略在结果中涉及此代码的主机。