omnet++学习记录2

OMNET++ 学习过程记录2

1.先在.cc中声明

class NODE1 : public cSimpleModule
{
}

2.再在.cc中注册

Define_Module(NODE1);写在.cc文件里

3.再在.cc中定义具体函数内容

void NODE1::initialize()
{}
等函数

4.再在.ned中调用

simple NODE1
{
gates:
parameters:
//在这里面就是一些拓扑等可视化的配置
}

实际代码分析:

1.避免使用全局变量,全局变量会阻止并行执行。建议把变量作为private或protected的成员数据封装到简单模块中,并且通过public函数使用。其他模块就可以调用这些public函数来得到或设置值。
2.具体代码结构:
(1)在NODE1.h文件中:

class NODE1: public cSimpleModule
  {
      //private只能在下述public和protected的函数中使用,外部实例化后也不能直  接调用,除非指针用法
      private:
          cMessage *sendMessageEvent;
          long numSent;
      public:
         NODE1();//构造函数
          virtual ~NODE1();//析构函数
      protected:
          virtual void initialize();//模块初始化
          virtual void handleMessage(cMessage *msg);//消息处理
          virtual void finish();//仿真结束
}

(2)在NODE1.cc文件中:

NODE1::NODE1()
{
   sendMessageEvent = NULL;//清空事件
}
void NODE1::initialize()
{
   numSent = 0;//置0
   sendMessageEvent = new cMessage("sendMessageEvent");//创建新事件
   scheduleAt(0.0, sendMessageEvent);//发送数据
}
void NODE1::handleMessage(cMessage *msg)
{
   ASSERT(msg==sendMessageEvent);
   cMessage *m = new cMessage("packet");
   m->setLength(par("msgLength"));
   send(m, "out");//发送数据回去
   numSent++;
   double deltaT = (double)par("sendlaTime");
   scheduleAt(simTime()+deltaT, sendMessageEvent);
}
void  NODE1::finish()
{
   recordScalar("packets sent", numSent);
}
NODE1::~ NODE1()
{
   cancelAndDelete(sendMessageEvent);
}

(3)在NODE1.ned文件中:

simple NODE1
{
   parameters:
      volatile double sendlaTime;
   gates:
      output out;
}

3.代码总结:
(1)handleMessage()会被自动调用,其中与事件/消息相关的函数只有3个:
send();//发送消息至其他模块
scheduleAt();//调度一个事件(模块发送消息给自己)
cancelEvent();//删除一个scheduleAt()调度的事件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值