我不知道在eclipse/omnet++中添加函数是否有逻辑:尝试简单地向VeinsInetSampleApplication.h头文件添加一个新函数"init_func“
#pragma once
#include "veins_inet.h"
#include "VeinsInetApplicationBase.h"
class VEINS_INET_API VeinsInetSampleApplication : public veins::VeinsInetApplicationBase {
protected:
bool haveForwarded = false;
protected:
virtual bool startApplication() override;
virtual bool stopApplication() override;
virtual void processPacket(std::shared_ptr<inet::Packet> pk) override;
// ADAPTION 2022/05/28
virtual void init_func();
public:
VeinsInetSampleApplication();
~VeinsInetSampleApplication();
};但是,当我简单地将startApplication()函数的初始化代码复制到VeinsInetSampleApplication.cc中的"init_func()“中时,"init_func()”就被我的模拟忽略了。
下面是代码片段,它将在time t=5秒向所有模拟节点发送一条消息。startApplication()函数的唯一区别是消息发送是在t=5sec触发的。不是在t=10sec。startApplication()函数正确地完成了它的工作,即使我注释掉它并且只让init_func()函数运行,它也会被忽略。(我尝试这样做是为了排除与“此”指针等有关的任何问题,这些问题会表明这两个函数之间存在“糟糕的交互”)。因此,我的init_func()实际上似乎没有注册。但我不知道。有人知道为什么"init_func()“在这里会被Omnet++忽略吗?
Init_func()代码:
void VeinsInetSampleApplication::init_func()
{
// host[0] should stop at t=5s, change in timerManger.create(...)
if (getParentModule()->getIndex() == 0) {
auto callback = [this]() {
getParentModule()->getDisplayString().setTagArg("i", 1, "red");
traciVehicle->setSpeed(0);
auto payload = makeShared<VeinsInetSampleMessage>();
timestampPayload(payload);
payload->setChunkLength(B(100));
payload->setRoadId(traciVehicle->getRoadId().c_str());
auto packet = createPacket("accident");
packet->insertAtBack(payload);
sendPacket(std::move(packet));
};
timerManager.create(veins::TimerSpecification(callback).oneshotAt(SimTime(5, SIMTIME_S)));
}
}(我还将返回类型"init_func“改为bool,以进一步提高相似性。但这当然也不成功)
向你问好,卢卡斯
发布于 2022-05-28 19:33:04
init_func()被忽略,因为它既不被initialize()调用,也不被任何其他方法调用。您决定创建一个新方法,因此必须在代码中的某个地方添加对该方法的调用。
https://stackoverflow.com/questions/72415581
复制相似问题