⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mytimerheap.h

📁 提供了rbtree ttree avltree list hashtable等常用容器的算法,代码经过uclinux + arm44b0平台验证
💻 H
字号:
/***mytimerheap.h 定时堆 lin shao chuan**/#ifndef __MYTIMERHEAP_H__#define __MYTIMERHEAP_H__#include "mymempool.h"#ifdef WIN32#include <winsock2.h>#endiftypedef struct __mytimerheap_handle_{int unused;}*HMYTIMERHEAP;typedef void * HTIMERID;/**超时触发的回调函数*@param 	context_data:触发回调时的用户上下文	timer_user_data:定时器节点相关的用户数据	timerid:定时器的id*/typedef int (*MY_TIMER_HEAP_TIMEOUT_CB)(unsigned long context_data, 										unsigned long timer_user_data);typedef struct __mytimer_node_t_{	unsigned long context_data;				/*触发回调时的用户上下文*/	unsigned long timer_user_data;			/*定时器节点相关的用户数据*/	MY_TIMER_HEAP_TIMEOUT_CB timeout_cb;	/*定时器回调函数*/	struct timeval period;					/* 定时超时间隔*/	struct timeval first_expire;			/* <第一次> 相对超时时间*/	struct timeval abs_expire;				/* <下一次> 绝对超时时间 */}mytimer_node_t;/***t1是否小于t2**/#define timeval_smaller(t1, t2) \	( ((t1).tv_sec < (t2).tv_sec) ? 1 : ( (((t1).tv_usec < (t2).tv_usec) && ((t1).tv_sec == (t2).tv_sec)) ? 1:0) )/***t1是否大于t2**/#define timeval_greater(t1, t2) \	( ((t1).tv_sec > (t2).tv_sec) ? 1 : ( (((t1).tv_usec > (t2).tv_usec) && ((t1).tv_sec == (t2).tv_sec)) ? 1:0) )/***t1 += t2**/#define timeval_add(t1, t2) do{\	(t1).tv_sec += (t2).tv_sec;\	(t1).tv_usec += (t2).tv_usec;\	if((t1).tv_usec >= (1000 * 1000))\	{\		(t1).tv_sec += (t1).tv_usec/(1000 * 1000);\		(t1).tv_usec = (t1).tv_usec % (1000 * 1000);\	}\	else if((t1).tv_usec < 0 && (t1).tv_sec >= 1)\	{\		(t1).tv_sec -= -1;\		(t1).tv_usec = 1000 * 1000 + (t1).tv_usec;\	}\}while(0)/***t1 -= t2**/#define timeval_minus(t1, t2) do{\	(t1).tv_sec -= (t2).tv_sec;\	(t1).tv_usec -= (t2).tv_usec;\	if((t1).tv_usec >= (1000 * 1000))\	{\		(t1).tv_sec += (t1).tv_usec/(1000 * 1000);\		(t1).tv_usec = (t1).tv_usec % (1000 * 1000);\	}\	else if((t1).tv_usec < 0 && (t1).tv_sec >= 1)\	{\		(t1).tv_sec -= 1;\		(t1).tv_usec = 1000 * 1000 + (t1).tv_usec;\	}\}while(0)/*** 构造定时堆**/extern HMYTIMERHEAP MyTimerHeapConstruct(HMYMEMPOOL hm);/*** 析构定时堆**/extern void MyTimerHeapDestruct(HMYTIMERHEAP hth);/*** 添加定时器**@param 	mytimer_node_t * node:定时器节点*@retval 定时器的id NULL:失败**/extern HTIMERID MyTimerHeapAdd(HMYTIMERHEAP hth, mytimer_node_t * node);/*** 删除定时器**/extern int MyTimerHeapDel(HMYTIMERHEAP hth, HTIMERID timerid);/*** 重置定时器**@param 	mytimer_node_t * node:定时器节点*@retval 定时器的id NULL:失败**/extern HTIMERID MyTimerHeapReset(HMYTIMERHEAP hth, HTIMERID timerid, mytimer_node_t * node);/*** 获取头节点,即绝对超时最小(最早超时)的键值**/extern HTIMERID MyTimeHeapGetEarliestKey(HMYTIMERHEAP hth);/*** 获取最小超时(绝对时间)**@retval 0:成功 -1:失败**/extern int MyTimerHeapGetEarliestExpire(HMYTIMERHEAP hth, struct timeval * expire);/*** 触发所有超时事件**@retval 超时个数**/extern unsigned MyTimerHeapRunExpire(HMYTIMERHEAP hth, struct timeval * tv_now);/*** 获取定时器的个数**/extern size_t MyTimerHeapGetCount(HMYTIMERHEAP hth);#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -