- 1、本文档共6页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
NS2是如何識别并调用执行协议
OTcl与C++,NS2是如何识别并调用执行协议
经过一段时间的代码阅读和资料查阅,在这里我想试着讲明一个困扰大多数NS2 Beginner的问题:Otcl和C++的交互,我们写的新协议(假若有的话)是如何被NS2执行的。 就简单的从我们现有的来自长庚大学的802.16的补丁说起。移植完16的补丁我们的NS2就可以执行MAC层协议为“Mac/802_16“的tcl脚本代码。但是这个补丁(wimax_v2.03)里面的代码全都是用C++编写的底层代码,在tcl脚本中设置MAC层协议为Mac/802_16,tcl解释器是如何正确的知道是执行我们的补丁呢? 这是tcl脚本中设置16协议的地方:set val(chan)?? Channel/WirelessChannel ;# channel typeset val(prop)?? Propagation/TwoRayGround?? ;# radio-propagation modelset val(netif) Phy/WirelessPhy ?? ?? ??? ;# network interface typeset val(mac) Mac/802_16 ?? ?? ?? ?? ?? ?? ;# MAC type?? ?? ??? …………………………………………?? ?? ??? …………………………………………$ns node-config -adhocRouting $val(rp) \?? ?? ?? ?? -llType $val(ll) \?? ?? ?? ?? -macType $val(mac) \?? ?? ??? …………………………………………?? ?? ??? …………………………………………我们打开ns-2.29/mac/mac-802_16下的mac-802_16.cc文件,翻看最后一段代码:static class Mac802_16Class : public TclClass // Mac802_16Class公共继承TclClass类{public:?? //构造函数Mac802_16Class()将Otcl中的类名Mac/802_16作为参数传给其父类TclClass的构造函数;?? //要注意,这里实际上是创建了两个类:Mac和802_16,并且802_16是Mac的子类;?? Mac802_16Class() : TclClass(Mac/802_16) {}?? //而create方法则创建一个要与Otcl类对应的C++类的对象实例,然后返回;?? TclObject* create(int, const char*const*)?? {?? ?? ?? return (new Mac802_16());?? }} class_mac802_16;一个声明为static的类,在NS2初始化的时候会调用该类的构造函数,此时NS2调用了Mac802_16Class:而构造函数Mac802_16Class(),则调用了TclClass(Mac/802_16)。我们接着翻看tclcl-1.17/Tcl.cc看TclClass()是如何工作的。在Tcl.cc文件中:TclClass::TclClass(const char* classname) : class_(0), classname_(classname){?? if (Tcl::instance().interp()!=NULL) {?? ?? ?? //如果Otcl语言解释器已存在的话,调用bind():?? ?? ?? // this can happen only (?) if the class is created as part of a dynamic library?? ?? ?? bind();?? } else {?? ?? ?? // the interpreter doesnt yet exist?? ?? ?? // add this class to a linked list that is traversed when?? ?? ?? // the interpreter is created?? ?? ?? ?? ?? ?? next_ = all_;?? ?? ?? all_ = this;?? }}往下找到bind():void TclClass::bind() //bind()函数是TclClass类的成员函数{?? //获取Tcl?? Tcl tcl = Tcl::
您可能关注的文档
- Nero刻錄软件使用教程及各种光盘刻录解决方法.doc
- nero刻錄软件教程.docx
- Nero刻錄软件使用教程.doc
- net_C音樂播放器设计实习报告.doc
- NET框架程序設计课后习题答案.doc
- NeverGiveUp演講稿.doc
- NF深圳媽湾电厂一期工程2x3OOMW机组建筑工程施工组织总设计.doc
- NG2-BASS3.0_技術规范_数据集市.doc
- NGBOSS2-BOSS(V3.0)業务规范V1.0.0.doc
- Nginx源碼分析--浅谈对模块module的基本认知.doc
- 《湖南武陵山片区农业生态效率测度及影响因素研究》.docx
- 《KC集团专用汽车生产基地项目可行性研究》.docx
- 《城市纯电动汽车驱动系统参数匹配及优化》.docx
- 健康教育讲座(2).pptx
- 《从VEGF诱导的SphK1过度转位探讨栀子苷抑制RA血管新生作用机制》.docx
- 新疆喀什市2023-2024学年八年级上学期期末质量监测数学试卷B(含.pdf
- 《减重步行训练结合电针治疗对脊髓损伤大鼠损伤组织GAP-43、BDNF的影响》.docx
- 新疆喀什市2022-2023学年高三压轴卷物理试卷含解析 .pdf
- 《过程性评价模式下高中英语科普文阅读教学中培养学生科学素养的行动研究》.docx
- 新疆喀什市2020-2021学年八年级下学期期末物理试题 .pdf
文档评论(0)