基于升序定时器的时间链表.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于升序定时器的时间链表基于升序定时器的时间链表

基于升序定时器的时间链表 李邦柱 helpylee@126.com 定时器简介 定时器通常包含至少两个成员:一个超时时间(通常采用相对时间或者超时时间)和一个超时时间到达后的一个回调函数。有时候还可能包含回调函数被执行时需要传入的参数,以及是否重新启动定时器,更改定时器的超时时间等。如果使用链表作为容器来串联所有的定时器,则每个定时器还要包含指向下一个定时器的指针成员。进一步,如果链表是双向的,则每个定时器还需要包含指向前一个定时器的指针成员。 升序定时器链表的实现 lst_timer.h #ifndef LST_TIMER #define LST_TIMER #includetime.h #define BUFFER_SIZE 64 class Timer;/*向前声明*/*/ /*用户数据结构,包含ip,端口,文件描述符,读缓存,以及定时器*/ struct client_data { char ip[BUFFER_SIZE]; int port; int sockfd; char buf[BUFFER_SIZE]; Timer *timer; }; /*定时器类*/ class Timer { public: Timer():prev(NULL),next(NULL){} public: time_t expire;/*任务的超时时间,此处使用绝对时间*/ client_data* user_data; void (*cb_func)(client_data*);/*任务回调函数*/ Timer* prev;/*指向前一个定时器*/ Timer* next;/*指向后一个定时器*/ void* arg; /*可根据需要进行扩展使用*/ }; /*定时器链表,它是一个升序,双向链表,且带有头节点和尾节点*/ class sort_timer_lst { public: sort_timer_lst():head(NULL),tail(NULL){} ~sort_timer_lst()/*链表被销毁的时候,删除所有的定时器*/ { Timer* tmp =head; while(tmp) { head=tmp-next; delete tmp; tmp =head; } } void add_timer(Timer* timer);/*将目标定时器添加到链表中*/ bool find_timer(Timer* timer);/*查找目标定时器*/ void del_timer(Timer* timer);/*删除目标定时器*/ void adjust_timer(Timer* timer);/*当某个定时任务发生变化时,调整对应的定时器在链表的位置,此函数之考的向后调整*/ void tick(); private: void add_timer(Timer* timer,Timer* head); private: Timer* head; Timer* tail; }; #endif lst_timer.cpp #includelst_timer.h void sort_timer_lst::add_timer(Timer* timer) { if(!timer) return; if(!head) { head= tail =timer; return ; } if(timer-expire head-expire) { timer-next = head; head -prev = timer; head = timer; return ; } add_timer(timer,head); } bool sort_timer_lst:: find_timer(Timer* timer) { Timer* tmp = head; while(tmp) { if(strcmp(tmp-user_data-stb_id , timer-user_data-stb_id)==0) { return true; } tmp = tmp-next; } if(!tmp) return false; } void sort_timer_lst::adjust_timer(Timer*timer) { if(!timer)

文档评论(0)

pkaokqunw + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档