[开发工具] 软件定时器框架

[复制链接]
498|2
 楼主| MacRsh 发表于 2023-7-5 22:02 | 显示全部楼层 |阅读模式
本帖最后由 MacRsh 于 2023-7-5 22:09 编辑

软件定时器文档

软件定时器是一种在软件层面实现计时功能的机制,通过软件定时器,可以在特定时间点或时间间隔触发特定的事件。软件定时器常用于实现周期性任务、超时处理、定时器中断等功能。

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

定时服务器用于时间管理和定时器处理。
定时客户端用于处理特定的超时处理,它需要注册到定时服务器并提供一个回调函数。

软件定时器服务原型

  1. <p>/* 定时服务器 */</p><p>structsoft_timer_server</p><p>{</p><p>    uint32_t time;/* 当前时间 */</p><p>structsoft_timer_list list;/* 定时器链表 */</p><p>};</p>

time:当前时间(从定时器启动到现在过去的时间)。
list:定时器链表(用于存储定时客户端)。

  1. <p>struct soft_timer_client</p><p>{</p><p>struct soft_timer_list list;/* 定时器链表 */</p><p>soft_timer_server_t server;/* 所属的服务器 */</p><p>    uint32_t interval;/* 定时间隔时间 */</p><p>    uint32_t timeout;/* 下次超时时间 */</p><p>int (*cb)(soft_timer_client_t client,void*args);/* 超时回调函数 */</p><p>void *args;/* 超时回调函数参数 */</p><p>};</p>

list:定时器链表(用于挂载到服务器)。
server:所属的服务器。
interval:定时间隔时间(初始化时设置)。
timeout:下次超时时间。
cb:回调函数。
args:回调函数参数。

初始化服务器

  1. void soft_timer_server_init(soft_timer_server_t server);



参数
描述
server
服务器句柄

更新服务器时间

  1. void soft_timer_server_update(soft_timer_server_t server, uint32_t time);


参数
描述
server
服务器句柄
time
更新过去的时间

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

  1. void soft_timer_server_handle(soft_timer_server_t server);



参数
描述
server
服务器句柄

添加新客户端

  1. <p>int soft_timer_client_add(soft_timer_client_t client,</p><p>                          uint32_t time,</p><p>int(*cb)(soft_timer_client_t client,void*args),</p><p>void *args,</p><p>soft_timer_server_t server);</p>


参数
描述
client
客户端句柄
time
客户端超时时间
cb
回调函数
args
回调函数参数
server
服务器句柄
返回
  
SOFT_TIMER_ERR_OK
添加成功
错误码
添加失败

移除客户端

  1. int soft_timer_client_remove(soft_timer_client_t client);



参数
描述
client
客户端句柄
返回
  
SOFT_TIMER_ERR_OK
移除成功
错误码
移除失败

启动客户端

  1. int soft_timer_client_start(soft_timer_client_t client);



参数
描述
client
客户端句柄
返回
  
SOFT_TIMER_ERR_OK
启动成功
错误码
启动失败

暂停客户端

  1. int soft_timer_client_stop(soft_timer_client_t client);



参数
描述
client
客户端句柄
返回
  
SOFT_TIMER_ERR_OK
暂停成功
错误码
暂停失败

添加并启动新客户端

  1. <p>int soft_timer_client_add_then_start(soft_timer_client_t client,</p><p>                                     uint32_t time,</p><p>int(*cb)(soft_timer_client_t client,void*args),</p><p>void *args,</p><p>soft_timer_server_t server);</p><p>
  2. </p>


参数
描述
client
客户端句柄
time
客户端超时时间
cb
回调函数
args
回调函数参数
server
服务器句柄
返回
  
SOFT_TIMER_ERR_OK
添加成功
错误码
添加失败

使用示例:
  1. /* 定义定时器服务器和客户端 */
  2. struct soft_timer_server server;
  3. struct soft_timer_client timer1, timer2, timer3;

  4. int timer1_callback(soft_timer_client_t client, void *args)
  5. {
  6.     printf("timer1_callback\r\n");
  7.     return MR_ERR_OK;
  8. }

  9. int timer2_callback(soft_timer_client_t client, void *args)
  10. {
  11.     printf("timer2_callback\r\n");
  12.     return MR_ERR_OK;
  13. }

  14. int timer3_callback(soft_timer_client_t client, void *args)
  15. {
  16.     printf("timer3_callback\r\n");
  17.     soft_timer_client_stop(client);
  18.     return MR_ERR_OK;
  19. }

  20. int main(void)
  21. {
  22.     /* 初始化服务器 */
  23.     soft_timer_server_init(&server);

  24.     /* 添加客户端到服务器并启动 */
  25.     soft_timer_client_add_then_start(&timer1, 5, timer1_callback, MR_NULL, &server);
  26.     soft_timer_client_add_then_start(&timer2, 10, timer2_callback, MR_NULL, &server);
  27.     soft_timer_client_add_then_start(&timer3, 15, timer3_callback, MR_NULL, &server);

  28.     while (1)
  29.     {
  30.         /* 更新服务器时钟 */
  31.         soft_timer_server_update(&server, 1);

  32.         /* 服务器处理客户端超时(放在哪里,回调就将在哪里被调用) */
  33.         soft_timer_server_handle(&server);
  34.     }
  35. }

下载代码(https://gitee.com/MacRsh/mr-library/tree/master/)(路径:mr-library/ package / soft_timer)

许可协议
遵循 Apache License 2.0 开源许可协议,可免费应用于商业产品,无需公开私有代码。

Jacquetry 发表于 2023-7-6 23:23 | 显示全部楼层
这个框架有什么优势啊?》

评论

相较于开源的MultiTimer框架,这个框架可以提供多个时基信号,更灵活。  发表于 2023-7-8 11:01
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

16

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部