软件定时器文档

软件定时器是一种在软件层面实现计时性能的机制,通过软件定时器,能够在特定工夫点或工夫距离触发特定的事件。软件定时器罕用于实现周期性工作、超时解决、定时器中断等性能。

软件定时器蕴含两个次要组件:定时服务器和定时客户端。

  • 定时服务器用于工夫治理和定时器解决。
  • 定时客户端用于解决特定的超时解决,它须要注册到定时服务器并提供一个回调函数。

软件定时器服务原型

/* 定时服务器 */struct soft_timer_server{    uint32_t time;                                                  /* 以后工夫 */    struct soft_timer_list list;                                    /* 定时器链表 */};
  • time:以后工夫(从定时器启动到当初过来的工夫)。
  • list:定时器链表(用于存储定时客户端)。
struct soft_timer_client{    struct soft_timer_list list;                                    /* 定时器链表 */    soft_timer_server_t server;                                     /* 所属的服务器 */    uint32_t interval;                                              /* 定时间隔时间 */    uint32_t timeout;                                               /* 下次超时工夫 */    int (*cb)(soft_timer_client_t client, void *args);              /* 超时回调函数 */    void *args;                                                     /* 超时回调函数参数 */        };
  • list:定时器链表(用于挂载到服务器)。
  • server:所属的服务器。
  • interval:定时间隔时间(初始化时设置)。
  • timeout:下次超时工夫。
  • cb:回调函数。
  • args:回调函数参数。

初始化服务器

void soft_timer_server_init(soft_timer_server_t server);
参数形容
server服务器句柄

更新服务器工夫

void soft_timer_server_update(soft_timer_server_t server, uint32_t time);
参数形容
server服务器句柄
time更新过来的工夫

服务器查看超时定时器,唤醒客户端

void soft_timer_server_handle(soft_timer_server_t server);
参数形容
server服务器句柄

增加新客户端

int soft_timer_client_add(soft_timer_client_t client,                          uint32_t time,                          int (*cb)(soft_timer_client_t client, void *args),                          void *args,                          soft_timer_server_t server);
参数形容
client客户端句柄
time客户端超时工夫
cb回调函数
args回调函数参数
server服务器句柄
返回
SOFT_TIMER_ERR_OK增加胜利
错误码增加失败

移除客户端

int soft_timer_client_remove(soft_timer_client_t client);
参数形容
client客户端句柄
返回
SOFT_TIMER_ERR_OK移除胜利
错误码移除失败

启动客户端

int soft_timer_client_start(soft_timer_client_t client);
参数形容
client客户端句柄
返回
SOFT_TIMER_ERR_OK启动胜利
错误码启动失败

暂停客户端

int soft_timer_client_stop(soft_timer_client_t client);
参数形容
client客户端句柄
返回
SOFT_TIMER_ERR_OK暂停胜利
错误码暂停失败

增加并启动新客户端

int soft_timer_client_add_then_start(soft_timer_client_t client,                                     uint32_t time,                                     int (*cb)(soft_timer_client_t client, void *args),                                     void *args,                                     soft_timer_server_t server);
参数形容
client客户端句柄
time客户端超时工夫
cb回调函数
args回调函数参数
server服务器句柄
返回
SOFT_TIMER_ERR_OK增加胜利
错误码增加失败

应用示例:

/* 定义定时器服务器和客户端 */struct soft_timer_server server;struct soft_timer_client timer1, timer2, timer3;int timer1_callback(soft_timer_client_t client, void *args){    printf("timer1_callback\r\n");    return MR_ERR_OK;}int timer2_callback(soft_timer_client_t client, void *args){    printf("timer2_callback\r\n");    return MR_ERR_OK;}int timer3_callback(soft_timer_client_t client, void *args){    printf("timer3_callback\r\n");    soft_timer_client_stop(client);    return MR_ERR_OK;}int main(void){    /* 初始化服务器 */    soft_timer_server_init(&server);        /* 增加客户端到服务器并启动 */    soft_timer_client_add_then_start(&timer1, 5, timer1_callback, MR_NULL, &server);    soft_timer_client_add_then_start(&timer2, 10, timer2_callback, MR_NULL, &server);    soft_timer_client_add_then_start(&timer3, 15, timer3_callback, MR_NULL, &server);            while (1)    {        /* 更新服务器时钟 */        soft_timer_server_update(&server, 1);                /* 服务器解决客户端超时(放在哪里,回调就将在哪里被调用) */        soft_timer_server_handle(&server);    }}

----------

下载代码(门路:mr-library/ package / soft_timer)

----------

许可协定

遵循 Apache License 2.0 开源许可协定,可收费利用于商业产品,无需公开公有代码。