定时器的使用

时间:2021-09-30 03:13:43

原文地址:http://blog.163.com/xiaohuan0614@126/blog/static/4808431320124319380547/

在ns中自定义一个定时器的方法

过程应该是下面的6步,但是由于是实现了好多天之后才写的总结,所以不保证不缺少步骤

(1)       定义一个定时器类,定时器类重载

class CClearRouteTimer : public Handler {

public:

        CClearRouteTimer(CAODV* a) : agent(a) {}

        void    handle(Event*);

private:

        CAODV    *agent;

   Event        intr;

};

(2)       定时事件执行

void

CClearRouteTimer::handle(Event*) {

   agent->clearRoute();

   #define ClearInterval 5

   Scheduler::instance().schedule(this, &intr, ClearInterval);

}

(3)       在要使用定期器类(CClearRouteTimer)的类(CAODV)中声明定时器类为该类的友元

class CAODV: public Tap, public Agent {

  friend class caodv_rt_entry;

          friend class CClearRouteTimer;//add

(4)       在类(CAODV)中定义定时器变量

CClearRouteTimer crtimer;//add

(5)       在类(CAODV)的构造函数中初始化定时器变量

CAODV::CAODV(nsaddr_t id) : Agent(PT_CAODV),

                       crtimer(this),btimer(this), htimer(this), ntimer(this),

                       rtimer(this), lrtimer(this), rqueue() {

(6)       定时器开启

在command函数中添加

if(strncasecmp(argv[1], "start", 2) == 0) {

      btimer.handle((Event*) 0);

                      crtimer.handle((Event *)0);