cMessage

Message可以被调度(self-message)、取消、从一个Gate发送出去、直接发给另一个module;所有以上,都是通过cSimpleModule来实现的。

Message在创建时可以指定名字,其它信息包括消息类型、优先级、时间戳。控制信息字段允许我们使用模型模拟协议层间的通信。context pointer字段允许我们在同一时间是用多个计时器。一个Message中也存储了关于该消息的最后一次发送的信息,例如发送时间、到达时间、到达的module和gate。

isSelfMessage可以帮助我们区分self-message和来自其他节点的消息。

如果需要一些更多的字段,可以通过msg文件创建一个Message,它会自动继承cMessage的相关方法。

方法(msg->xxx()) 说明
setName(const char *) 设置消息名
const char * getName() 返回消息名
dup()

返回消息的副本;

cMessage * copy = msg->dup();

int getSenderModuleId() 获得发送该消息的Module的ID
int getSenderGateId() 获得发送该消息的Gate的ID
int getArrivalModuleId() 获得该消息将要到达的Module的ID
int getArrivalGateId() 获取该消息将要到达的Gate的ID
bool isSelfMessage() 判断消息是否是SelfMessage
 cModule  * getSenderModule() 获取指向发送该消息Module的指针 
cGate * getSenderGate() 返回一个指针,指向该消息上一次发送时的gate
cModule * getArrivalModule() 返回指向该消息到达Module的指针
cGate * getArrivalGate() 返回一个指针,指向该消息从哪个Gate到达

bool arrivedOn(int gateId)

bool arrivedOn(char * gateName , int gateIndex)

如果该消息通过给定的gate到达了,就返回true

long getId() 获取消息ID
virtual const char * getDisplayString() 展示消息在运行时的显示String
void setArrival(int moduleId,int gateId) 定制调度器,直接由调度器设置消息要到达的模块和Gate

cModule

cModule是cSimpleModule的父类,cSimpleModuel在cModule的基础上添加了许多方法。

方法 说明
virtual void setName(const char * s) 给Module命名
virtual const char * getFullName() 返回Module的全名,格式为:module名[i]
virtual string getFullPath() 返回Module的路径,格式为:网络名.vector名.mudule名[i]
virtual string str()  重写该方法以添加module ID
virtual cModule * getParentModule() const 返回该Module的父Module,具体分级可以通过getFullPath()方法得到
int getIndex() 获得该module在vector中的索引
getVectorSize() 获得该module所在vector的大小
virtual cModule * getSubmodule(const char * name,int index=-1) 返回指向 通过名字和索引指定 的Module
virtual cModule * getModuleByPath(const char * path) 返回通过 module路径指定的Module 的指针
virtual int gateSize(const char * gatename) 返回gate vector的size
virtual void arrived(cMessage * msg , cGate * ongate , simtime_t) 与send()方法相对应的方法,不过是在另一个Module中调用的。
virtual cCanvas *getCanvas() 返回这个Module的默认canvas

cSimpleModule

主要方法有四个initialize()、handleMessage(cMessage * msg)、finish()

initialize():omnet++在创建一个Module时调用该方法。

handleMessage(cMessage * msg):当Module收到一个Message时调用该方法。

我们可以使用send()方法向另一个Module发送消息,或者使用scheduleAt()和cancelEvent()方法来部署延迟、计时器、超时。

finish()函数当仿真成功结束时被调用。该方法的经典用法是记录下载仿真过程中的统计信息。

方法 说明
virtual void setName(const char * s) 给Module命名
virtual const char * getFullName() 返回Module的全名,格式为:module名[i]
virtual string getFullPath() 返回Module的路径,格式为:网络名.vector名.mudule名[i]
virtual string str()  重写该方法以添加module ID
virtual cModule * getParentModule() const 返回该Module的父Module,具体分级可以通过getFullPath()方法得到
int getIndex() 获得该module在vector中的索引
getVectorSize() 获得该module所在vector的大小
virtual cModule * getSubmodule(const char * name,int index=-1) 返回指向 通过名字和索引指定 的Module
virtual cModule * getModuleByPath(const char * path) 返回通过 module路径指定的Module 的指针
virtual int gateSize(const char * gatename) 返回gate vector的size
virtual void arrived(cMessage * msg , cGate * ongate , simtime_t) 与send()方法相对应的方法,不过是在另一个Module中调用的。
virtual cCanvas *getCanvas() 返回这个Module的默认canvas
virtual void handleMessage(cMessage * msg) 消息处理函数,当有消息到达时被调用
virtual void send( cMessage * msg , const char *gatename , int gateindex=-1) 从指定gate把消息发送出去
virtual sendDelayed(cMessage * msg, simtime_t delay,const char * gatename , int gateindex=-1 ) 延迟delay秒后把消息发送出去
void sendDirect(cMessage * msg,simtime_t propagation Delay,simtime_t duration,cModule * mod,const char * inputGateName , int gateindex=-1) 直接把一个消息发送到其他Module,
void scheduleAt(simtime_t t,cMessage * msg) 发送一个self-message
cMessage * cancelEvent(cMessage * msg) 移除一个消息。常用于我们之前用scheduleAt()部署的消息,用来取消一个计时器
void cancelAndDelete(cMessage * msg) 对msg调用cancelEvent(),之后删除它。该方法常用于SimpleModule的析构函数中,用于销毁self-message
void wait(simtime_t time)

等待一段时间。

只用于我们不希望其他消息在这段时间内到达的时候。

cGate

代表了一个Module的gate。

cGate对象被Module创建并管理,使用者通常不会直接创建和销毁cGate。

const char * getName() 返回gate的名字,不包含索引
const char * getFullName() 返回gate的全名,包含索引
cObject * getOwner() 返回gate的所属Module
cModule * getOwnerModule() 指向gate所属Module
int getIndex() 返回gate的索引号
int getVectorSize() 返回gate vector的size
cGate * getPreviousGate() 指向与这个gate相连接的上一个gate
cGate * getNextGate() 指向与这个Gate相连接的下一个Gate

omnet++:cMessage、cSimpleModule、cGate的更多相关文章

  1. 如果你也会C#,那不妨了解下F#(7):面向对象编程之继承、接口和泛型

    前言 面向对象三大基本特性:封装.继承.多态.上一篇中介绍了类的定义,下面就了解下F#中继承和多态的使用吧.

  2. 微软“.Net社区虚拟大会”dotnetConf2015:关键词:.NET 创新、开源、跨平台

    去年 11 月的时候,微软开源了 .NET CoreFX,然后是今年 2 月份的 .NET CoreCLR.自那时以来,已经有大约 3500 人在 GitHub 上进行了提交,而且贡献者的人数还在持续 ...

  3. UML类图(下):关联、聚合、组合、依赖

    前言 上一篇文章UML类图(上):类.继承.实现,讲了UML类图中类.继承.实现三种关系及其在UML类图中的画法,本文将接着上文的内容,继续讲讲对象之间的其他几种关系,主要就是关联.聚合.组合.依赖, ...

  4. 【完全开源】知乎日报UWP版:增加Live磁贴、Badge、以及Toast通知

    目录 说明 实现方法 APP生命期 后台任务 说明 之前网上有人建议增加磁贴(tile).徽章(badge)功能.利用周末的时间,将这两个功能添加上去了.如果将磁贴固定到开始屏幕,磁贴就会循环播放首页 ...

  5. Mina、Netty、Twisted一起学(八):HTTP服务器

    HTTP协议应该是目前使用最多的应用层协议了,用浏览器打开一个网站就是使用HTTP协议进行数据传输. HTTP协议也是基于TCP协议,所以也有服务器和客户端.HTTP客户端一般是浏览器,当然还有可能是 ...

  6. 前端开发:css技巧,如何设置select、radio 、 checkbox 、file这些不可直接设置的样式 。

    前言: 都说程序员有三宝:人傻,钱多,死得早.博主身边的程序“猿”一大半应了这三宝,这从侧面说明了一个问题,只有理性是过不好日子的.朋友们应该把工作与生活分开,让生活变得感性,让工作变得理性,两者相提 ...

  7. 几句话就能让你理解:this、闭包、原型链

    以下是个人对这三个老大难的总结(最近一直在学习原生JS,翻了不少书,不少文档,虽然还是新手,但我会继续坚持走我自己的路) 原型链 所有对象都是基于Object.prototype,Object.pro ...

  8. Foundation框架下的常用类:NSNumber、NSDate、NSCalendar、NSDateFormatter、NSNull、NSKeyedArchiver

    ========================== Foundation框架下的常用类 ========================== 一.[NSNumber] [注]像int.float.c ...

  9. EF和MVC系列文章导航:EF Code First、DbContext、MVC

    对于之前一直使用webForm服务器控件.手写ado.net操作数据库的同学,突然来了EF和MVC,好多新概念泉涌而出,的确犹如当头一棒不知所措.本系列文章可以帮助新手入门并熟练使用EF和MVC,有了 ...

随机推荐

  1. python代码加注释--6

    备注:#用来注释代码,#后面的内容会被python解释器忽略

  2. SpringBoot 简单介绍

    一.springboot是啥? 1.什么是springboot? 1.1springboot是spring生态圈的一个轻量级框架,换句话说springboot就是spring,是spring的一个衍生 ...

  3. checklist 编写指南

    checklist 编写工具 checklist文档格式推荐使用思维导图.比如 MindMaster 和 processon.我喜欢用这些平台或者软件的思维导图大纲模式来编写 checklist. c ...

  4. 如何在Visual Studio中添加opencvsharp的可视化工具

    这个文件放到这个目录下,就可以看mat对象查看了

  5. ApacheCN 深度学习译文集 20201218 更新

    新增了四个教程: Python 人工智能中文版 0 前言 1 人工智能简介 2 人工智能的基本用例 3 机器学习管道 4 特征选择和特征工程 5 使用监督学习的分类和回归 6 集成学习的预测分析 7 ...

  6. STL priority_queue 优先队列 小记

    今天做题发现一个很有趣的地方,竟然还是头一次发现,唉,还是太菜了. 做图论用STL里的priority_queue去优化prim,由于特殊需求,我需要记录生成树中是用的哪些边. 于是,我定义的优先队列 ...

  7. RedHat Linux 忘记密码

    一.无法进入系统 在虚拟机开机3秒时按e 选择第二个选项带有quite的那个 进入界面后,在quite后,空格+single 进入单用户模式 然后输入passwd +账号(要修改的账号) 输入新的密码 ...

  8. jdbc插入或查询数据库时间总是比实际时间少8小时原因

    mysql插入数据库的时间总是有问题,比实际时间要早8小时.检查是jdbc连接的url中配置的时区有问题,原先是 jdbc.url=jdbc:mysql://47.**.**.**:3306/yeey ...

  9. tabbar选中按钮的标题颜色和字体

    @implementation XMGTabBarController /* 问题: 1.选中按钮的图片被渲染 -> iOS7之后默认tabBar上按钮图片都会被渲染 1.修改图片 2.通过代码 ...

  10. iOS 模糊、精确搜索匹配功能方法总结 By HL

    字符串搜索主要用于UITableView的搜索功能的筛选,过滤,查询 下面是一些流行的搜索查询方法 一.遍历搜索 for循环 根据要求:精确搜索(判读字符串相等)   模糊搜索(字符串包含) 相关知识 ...