这是我参与8月更文挑战的第5天,活动详情查看:8月更文挑战
timer
定时器在各种场景都需要用到,主要用途是执行定时任务。 下面先看一下tbox的定时器。
tbox
使用场景:
- 提供高精度定时器
tb_timer
tb_timer_ref_t tb_timer(tb_noarg_t);
全局定时器
tb_timer_init
tb_timer_ref_t tb_timer_init(tb_size_t grow, tb_bool_t ctime);
初始化定时器
tb_timer_exit
tb_void_t tb_timer_exit(tb_timer_ref_t timer);
退出定时器
tb_timer_kill
tb_void_t tb_timer_kill(tb_timer_ref_t timer);
杀死定时器
tb_timer_clear
tb_void_t tb_timer_clear(tb_timer_ref_t timer);
清理定时器
tb_timer_delay
tb_size_t tb_timer_delay(tb_timer_ref_t timer);
延长定时器
tb_timer_top
tb_hize_t tb_timer_top(tb_timer_ref_t timer);
返回定时器何时执行
tb_timer_spak
tb_bool_t tb_timer_spak(tb_timer_ref_t timer);
单线程外部循环的spak计时器
tb_timer_loop
tb_void_t tb_timer_loop(tb_timer_ref_t timer);
外部线程的循环定时器
tb_timer_task_post
tb_void_t tb_timer_task_post(tb_timer_ref_t timer, tb_size_t delay, tb_bool_t repeat, tb_timer_task_func_t func, tb_cpointer_t priv);
延迟后的后定时器任务,过期后将自动删除
tb_timer_task_post_at
tb_void_t tb_timer_task_post_at(tb_timer_ref_t timer, tb_hize_t when, tb_size_t period, tb_bool_t repeat, tb_timer_task_func_t func, tb_cpointer_t priv);
按照绝对时间删除定时器任务,并在自动删除后,过期
tb_timer_task_post_after
tb_void_t tb_timer_task_post_after(tb_timer_ref_t timer, tb_hize_t after, tb_size_t period, tb_bool_t repeat, tb_timer_task_func_t func, tb_cpointer_t priv);
按照相对时间删除定时器任务,并在自动删除后,过期
tb_timer_task_init
tb_timer_task_ref_t tb_timer_task_init(tb_timer_ref_t timer, tb_size_t delay, tb_bool_t repeat, tb_timer_task_func_t func, tb_cpointer_t priv);
初始化延迟定时器任务,需要手动删除它
tb_timer_task_init_at
tb_timer_task_ref_t tb_timer_task_init_at(tb_timer_ref_t timer, tb_hize_t when, tb_size_t period, tb_bool_t repeat, tb_timer_task_func_t func, tb_cpointer_t priv);
按照绝对时间初始化定时器任务,需要手动删除它
tb_timer_task_init_after
tb_timer_task_ref_t tb_timer_task_init_after(tb_timer_ref_t timer, tb_hize_t after, tb_size_t period, tb_bool_t repeat, tb_timer_task_func_t func, tb_cpointer_t priv);
按照相对时间初始化定时器任务,需要手动删除它
tb_timer_task_exit
tb_void_t tb_timer_task_exit(tb_timer_ref_t timer, tb_timer_task_ref_t task);
退出定时器任务,如果尚未调用该任务,则不会调用该任务
tb_timer_task_kill
tb_void_t tb_timer_task_kill(tb_timer_ref_t timer, tb_timer_task_ref_t task);
杀死定时器任务,如果尚未调用该任务,则不会调用该任务
你可以通过设置
全局的默认
tb_timer()中投递的定时器任务,tbox会在后台创建一个单独的线程去维护它的所有任务。
如果觉得这个太占资源, 自己有特定线程在不断loop的话可以创建个独立的timer,挂接到自己的loop线程中,重用线程资源: