ns2学习(一) 调度器Scheduler
来源:互联网 发布:永久免费空间php 编辑:程序博客网 时间:2024/05/17 01:29
NS2中事件调度的主要功能是处理分组的延迟以及充当定时器。时间调度器的执行过程如下:
1.从所有事件(Event)中选择发送时刻最早的事件
2.调用它的handle_函数
3.执行完毕后,从剩余的所有事件中选择发生时刻最早的事件执行,如此反复
单位:秒
调度器分为4中:链表调度器(List Scheduler)、堆调度器(Heap Scheduler)、日历队列调度器(Calendar Queue Scheduler)、实时调取器(Real-timeScheduler)。默认为日历调度器
ns只支持单线程,故在任何时刻只有一个时间执行。
Event类的定义
class Event {public:Event* next_;/* 事件链表中的下一个时间 */Event* prev_;<span>/* 事件链表中的上一个时间 */Handler* handler_;/* 要处理的事件 */double time_;/* 时间处理的时间 */scheduler_uid_t uid_;/* 时间的唯一 ID */Event() : time_(0), uid_(0) {}};
Hander基类
class Handler { public:virtual ~Handler () {}virtual void handle(Event* event) = 0;};它是所有hander的基类
Scheduler类
class Scheduler : public clObject {public:static Scheduler& instance() {return (*instance_);// 调度器的通用入口}void schedule(Handler*, Event*, double delay)</span>;// sched later eventvirtual void run();// execute the simulatorvirtual void cancel(Event*) = 0;// cancel eventvirtual void insert(Event*) = 0;// schedule eventvirtual Event* lookup(scheduler_uid_t uid) = 0;// look for eventvirtual Event* deque() = 0;// next event (removes from q)virtual const Event* head() = 0;// next event (not removed from q)double clock() const {// simulator virtual timereturn (clock_);}virtual void sync() {};virtual double start() {// start timereturn SCHED_START;}virtual void reset();protected:void dumpq();// for debug: remove + print remaining eventsvoid dispatch(Event*);// execute an eventvoid dispatch(Event*, double);// exec event, set clock_Scheduler();virtual ~Scheduler();int command(int argc, const char*const* argv);double clock_;int halted_;static Scheduler* instance_;static scheduler_uid_t uid_;};
如何把事件加入调度器
voidwaveDeferTimer::start(double time){Scheduler &s = Scheduler::instance();assert(busy_ == 0);busy_ = 1;paused_ = 0;stime = s.clock();rtime = time;#ifdef USE_SLOT_TIMEROUND_TIME();#endifassert(rtime >= 0.0);s.schedule(this, &event, rtime);}
在一个类的方法中,实例化一个调度器对象Scheduler &s = Scheduler::instance(); ,然后设置完参数后调用s.schedule(this, &intr, rtime);
这样就把一个事件放入调度器
0 0
- ns2学习(一) 调度器Scheduler
- NS2的调度器Scheduler调度过程(事件的执行过程)
- Cocos2d-调度器(scheduler)
- RxJava学习笔记之线程调度器Scheduler(二)
- openstack-nova-Scheduler调度器学习
- Rxjava学习(三线程调度器Scheduler)
- NS2 学习笔记(一)
- 调度器(scheduler)
- 调度器 Scheduler
- Yarn 调度器Scheduler
- 调度器 Scheduler
- ns2 (Handler, Event, Scheduler, Timer)
- Linux Complete Fair Scheduler (CFS) 进程调度器学习笔记(针对内核版本3.6.11)
- RxJava学习笔记(三)--- 线程调度Scheduler
- NS2学习(4)——事件调度机制
- SMS SCHEDULER 短信调度器
- cocos2d-x 调度器(scheduler)
- Yarn 调度器Scheduler详解
- xss 的一些总结 (丘永华的书)
- 解析网络数据时,String与InputStream互转的几种方法
- Android Studio 配置Android Annotation
- 进程间通信
- 3DTouch Demo 从零构建3D Touch 教学
- ns2学习(一) 调度器Scheduler
- mysql拼合查询
- 模糊辨识和估计的最小二乘法算法
- linux下的网络配置
- eclipse 中spring项目配置hibernate-tools
- SQL2000/2005&2008中master数据库备份与恢复
- 超时 调用Webservice超时怎么办
- Asp.net - Razor - 将Model中变量的值赋值给Javascript变量
- RestTemplate实践