📄 timer.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 + -