C语言定时任务库的实现(一)

本文介绍了一种多实例单线程多任务的定时器库设计方案,该方案通过优化线程管理和任务调度,有效避免了频繁创建线程带来的性能损耗,并提供了简单易用的API接口。

目的

在项目开发过程中,我们常常需要定时的执行一些任务,通常的做法我们会创建一个线程,然后在线程里执行一个定时任务,如果有N个定时任务,则需要启动N个定时任务。这种做法有以下几个弊端。

1、频繁的创建线程可能会影响系统的整体运作性能。

2、每实现一个定时任务,则需要考虑任务的创建,销毁,任务的执行,而且大部分的内容是冗余的。

3、多任务之间的同步问题。

为了解决以上问题,我实现了一个多实例单线程多任务的定时器库。

实现方案

数据结构


typedef struct {
    struct list_head       head;                    // 链表头
    mtimer_task_callback   run;                     // 任务回调
    unsigned int        id;                         // 定时任务id
    unsigned int        last_tick;                  // 上一次执行的时间
    unsigned int        timeout;                    // 定时的超时时间,ms
    mtimer_task_mode    mode;                       // 定时任务的工作模式,两种工作模式。
    void           *user_data1;                     // 定时任务的上下文1
    void           *user_data2;                     // 定时任务的上下文2
    unsigned int        remove;                     // 定时任务是否标记删除
} mtimer_task;                                      // 定时任务节点

typedef s
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值