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

📄 timer.h

📁 CBS(小区广播)程序实现手稿
💻 H
字号:
#include <windows.h>


#ifndef _TIMER
#define _TIMER

#define TIMER_GROUPS      6      //定时器组数,每组有不同的定时范围
#define TIMER_GROUP_STEPS 100    //每组内的定时步数
#define TIMER_MIN_PERIOD  10     //定时器最小精度(ms)
#define TIMERS            30000 //系统预分配的定时器总数
#define PARA_LEN		  2     //定时器节点中用户参数长度

#define TIMER_FREE      0      //定时器空闲标识
#define TIMER_BUSY        1      //定时器忙标识
#define TIMER_OLD         2      //定时器过时标识


//	每组定时器最大定时单位
//	这 6 组定时器的最大定时时长是
//		组0  10MS-1000MS , 步长10ms,
//		组1  100MS-10S, 步长100ms,
//		组2  1S-100S, 步长1s,
//		组3  10s-1,000S, 步长10s,
//		组4  100s-10,000S, 步长100s,
//		组5  1,000S-100,000S, 步长1,000s,


// 定时器结点结构

struct timer_node_t
{
    int			  owner;     // 创建者编号
    int           timer_type;  // 定时器类别码
    int           next;      // 后继指针
    int           head_ptr;  // 定时器节点所在的链
    char          flag;      // 忙闲标志 0/1/2  闲/忙/过时    
    char          para[PARA_LEN];  // 参数内容
};

//定时器到期时发送的消息
struct timer_expire_message_t
{
	unsigned short len;
	char          cHandToHandSingnal[8];
	int			  message_area;  //消息类别:A,B,C(1,2,3)
	int			  owner;         // 创建者编号
    int			  sender;        //发送者标识
	int           message_type;    // 定时器类别码
	int		      message_length;//消息长度
	int			  timer_id;      //定时器标识
    char          flag;          // 标志 :1:定时到,2:过时的定时器    
    char          para[PARA_LEN];  // 参数内容
}; 

//  定时器控制区

struct timer_control_t
{
    LARGE_INTEGER         frequency;  // CPU 主频,单位:MHZ
    LARGE_INTEGER         period[TIMER_GROUPS];  // 每个计量单位,从1MS到10000S
    LARGE_INTEGER		  upper_range[TIMER_GROUPS];//每组的定时上限
	LARGE_INTEGER         last_time[TIMER_GROUPS];  // 每个标尺中上次刻度
    int                   cur_pos[TIMER_GROUPS]; // 每个标尺当前指针
	int					  total_count; //定时器总数
	int                   free_count;  // 空闲定时器结点个数
    int                   free_head;   // 空闲链头
//  int                   free_tail;   // 空闲链尾
    int					  head[TIMER_GROUPS*TIMER_GROUP_STEPS]; 
                          // 定时器链的头指针,指向该链的第一个定时器

} timer_control;


//定时器数据区
struct timer_node_t       timer_node[TIMERS];

#define FREQUENCY         (timer_control.frequency.QuadPart/1000)

HANDLE timer_mutex;       //定时器互斥量

#endif

//定时器管理外部接口函数

/*---------------------------------
	初始化各定时器链表,包括
	空闲定时器队列,悬挂定时器队列、
	工作定时器队列等
---------------------------------*/
int Init_TimerQueue();

//初始化定时器管理例程
//返回:0:成功,-1:失败(原因是系统不支持高精度定时)
extern int init_timer();  
//创建一个定时器
//返回:>=0,成功,即分配的定时器句柄,-1:失败
extern int create_timer(ULONG count,int timer_type,char *owner,void * para);
//释放一个定时器
//返回:>=0,成功,即释放的定时器句柄,<0:失败
extern int kill_timer(int id, char *owner);




//定时器管理例程内部使用的函数

//开启定时器扫描器
extern void set_timer();
//创建一个定时器
extern int create_a_timer(ULONG count,int timer_type,char *owner,void * para);
//释放一个定时器
extern int kill_a_timer(int id, char * owner);
//定时器扫描器
extern void scan_timer(void *dummy);
//定时器到时时发送消息给主控
extern void send_message(int link_id);

⌨️ 快捷键说明

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