原文地址: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);