软件定时器文档
软件定时器是一种在软件层面实现计时功能的机制,通过软件定时器,可以在特定时间点或时间间隔触发特定的事件。软件定时器常用于实现周期性任务、超时处理、定时器中断等功能。
软件定时器包含两个主要组件:定时服务器和定时客户端。
- 定时服务器用于时间管理和定时器处理。
- 定时客户端用于处理特定的超时处理,它需要注册到定时服务器并提供一个回调函数。
软件定时器服务原型
/* 定时服务器 */
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_callbackrn");
return MR_ERR_OK;
}
int timer2_callback(soft_timer_client_t client, void *args)
{
printf("timer2_callbackrn");
return MR_ERR_OK;
}
int timer3_callback(soft_timer_client_t client, void *args)
{
printf("timer3_callbackrn");
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 开源许可协议,可免费应用于商业产品,无需公开私有代码。
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
相关推荐: iOS 使用coreData存贮页面的模型数据中的字典
我们使用coreData时候,会遇到较为复杂的数据类型的存贮,例如,我们要存一个模型,但是一个模型里面有个字典,这时候,我们该如何存贮呢 如图所示,一个对象中含有一个字典 我们实现一个公共的方法,将对象的所有属性都赋值给对应的coreData模型 id mak…