当前位置: 首页 > wzjs >正文

网站建设客户去哪找洛阳做网站推广

网站建设客户去哪找,洛阳做网站推广,html网页设计思路,个人网站做哪一种比较赚钱1、说明 使用回调函数,注册定时器触发事件的模式,提高定时器中断的可操作性,那如何实现呢? 2、.h文件 下面是定时器句柄的声明 3、.c文件 3.1、静态定时器句柄头 3.2、定时器回调函数处理 下面的函数是放在1ms的中断中的&#…

1、说明

      使用回调函数,注册定时器触发事件的模式,提高定时器中断的可操作性,那如何实现呢?

2、.h文件

下面是定时器句柄的声明

3、.c文件

3.1、静态定时器句柄头

3.2、定时器回调函数处理

下面的函数是放在1ms的中断中的,不断执行;注意中断中不宜挂载过多的定时器句柄

3.3、注册定时器句柄

3.4、删除注册的句柄

3.5、启动xxx定时器句柄

3.6、暂停xxx定时器句柄

4、定时器中断函数

1ms定时器中断中,就放定时器回调处理的函数即可

5、应用说明

1、注册定时器句柄

2、启动定时器句柄

3、根据实际需要,删除 or 暂停 某个定时器句柄,之后再重新注册 or 启动

6、源码

//1ms定时器中断

void timer_interrupt_1ms(void)

{

   timerCallbackHandle_1ms();

}


 

typedef void (*pCallback)(void);  //回调函数指针类型

typedef enum{

    IDLE = 0,

    ONGOING

}E_STATE;

typedef struct TimerHandle_st{

   const char *name;    //名字

   uint32_t cnt;        //累积值

   uint32_t upperCnt;   //目标值

   E_STATE state;       //运行状态

   pCallback callback;  //回调函数

   struct TimerHandle_st *pNext;  //指向下一个 TimerHandle_st

}TimerHandle_st;


 

//初始化一个静态的定时器句柄头

static TimerHandle_st *pTimerHandle = NULL;

//1ms 定时器回调处理

void timerCallbackHandle_1ms(void)

{

   TimerHandle_st *pTHd = pTimerHandle;

   

   while(pTHd != NULL)

   {

      if(pTHd->callback != NULL && pTHd->state == ONGOING)

      {

         //定时到了

         if(pTHd->cnt >= pTHd->upperCnt)

         {

            pTHd->cnt = 0;     //重装载计数值

            pTHd->callback();  //执行回调函数

         }

         else

         {

            pTHd->cnt++;

         }

         

         pTHd = pTHd->pNext;  //遍历下一个 TimerHandle_st

      }

   }

}

//注册定时器句柄

bool timerHandleRegister(const char *name, pCallback *p, uint32_t upperCnt)

{

   TimerHandle_st *pTHd = pTimerHandle;

   

   //首次注册,头部 TimerHandle_st

   if(pTHd == NULL)

   {

      pTHd = (TimerHandle_st *)malloc(sizeof(TimerHandle_st));

      if(pTHd == NULL)

      {

         return false;

      }

      pTHd->name = name;

      pTHd->cnt = 0;

      pTHd->upperCnt = upperCnt;

      pTHd->state = IDLE;

      pTHd->callback = p;

      pTHd->pNext = NULL;

   }

   else

   {

      while(pTHd != NULL)

      {

         if(pTHd->pNext == NULL)

         {

            pTHd->pNext = (TimerHandle_st *)malloc(sizeof(TimerHandle_st));

            if(pTHd->pNext == NULL)

            {

               return false;

            }

            pTHd->pNext.name = name;

            pTHd->pNext.cnt = 0;

            pTHd->pNext.upperCnt = upperCnt;

            pTHd->pNext.state = IDLE;

            pTHd->pNext.callback = p;

            pTHd->pNext.pNext = NULL;

            break;

         }

         

         pTHd = pTHd->pNext;

      }

   }

   return true;

}

//通过 name 删除注册的句柄

bool timerHandleDelete(const char *name)

{

   TimerHandle_st *pTHd = pTimerHandle;

   TimerHandle_st *preTHd = pTHd;

   while(pTHd != NULL)

   {

      if(strncmp(pTHd->name, name, strlen(pTHd->name)) == 0)

      {

         preTHd->pNext = pTHd->pNext; //上一个句柄连接到下一个句柄

         free(pTHd);

         return true;

      }

      preTHd = pTHd;  //记录当前句柄

      pTHd = pTHd->pNext;  //跳转下一个句柄

   }

   return false;

}

//通过 name 启动xxx定时器句柄

bool timerHandleStart(const char *name)

{

   TimerHandle_st *pTHd = pTimerHandle;

   while(pTHd != NULL)

   {

      if(strncmp(pTHd->name, name, strlen(pTHd->name)) == 0)

      {

         pTHd->state = ONGOING;

         return true;

      }

     

      pTHd = pTHd->pNext;  //跳转下一个句柄

   }

   return false;

}

//通过 name 暂停xxx定时器句柄

bool timerHandleStop(const char *name)

{

   TimerHandle_st *pTHd = pTimerHandle;

   while(pTHd != NULL)

   {

      if(strncmp(pTHd->name, name, strlen(pTHd->name)) == 0)

      {

         pTHd->state = IDLE;

         return true;

      }

     

      pTHd = pTHd->pNext;  //跳转下一个句柄

   }

   return false;

}


文章转载自:

http://Gdh8PHO0.nLzpj.cn
http://VHMZU9Lp.nLzpj.cn
http://NXJGxQQN.nLzpj.cn
http://sURZSlYG.nLzpj.cn
http://fyXAn5GF.nLzpj.cn
http://z1TUvK9m.nLzpj.cn
http://e0A9n97w.nLzpj.cn
http://AJjy20WV.nLzpj.cn
http://aIKKp2Q0.nLzpj.cn
http://6N4CRsoo.nLzpj.cn
http://Uk4xi46I.nLzpj.cn
http://Dvo2Pzrr.nLzpj.cn
http://0DOBv3rC.nLzpj.cn
http://5AzMsyxe.nLzpj.cn
http://2XfpjsYJ.nLzpj.cn
http://lADriozC.nLzpj.cn
http://VppaxOGN.nLzpj.cn
http://TIaM3t6N.nLzpj.cn
http://wQHAecXW.nLzpj.cn
http://6ZPaOmbm.nLzpj.cn
http://FsT6MxO0.nLzpj.cn
http://ne2KjILK.nLzpj.cn
http://MRxxZ2sI.nLzpj.cn
http://vErTYcM6.nLzpj.cn
http://fp0WQ2Zu.nLzpj.cn
http://fnPfVOOt.nLzpj.cn
http://I6poimZ3.nLzpj.cn
http://SrM16vXQ.nLzpj.cn
http://GCChUL23.nLzpj.cn
http://Ys7DxvAW.nLzpj.cn
http://www.dtcms.com/wzjs/739025.html

相关文章:

  • 在局域网建设网站网页制作教程赵丰年
  • 怎么做域名网站网站排名优化电话
  • 古交市网站建设公司深圳做网站比较好
  • 优秀企业建站天台网站建设
  • 免费素材网站排行榜域名 利用域名做网站 邮箱
  • 网站管理 地址:百度推广手机app下载
  • 免费开源的建站系统怎么开网站详细步骤
  • 配送系统网站怎么做装修室内效果图大全
  • 漳州本地网站wordpress 去除页面标题
  • 深圳做网站网络公司有哪些网站做seo推广 s
  • 做纺织行业的网站凡科网做的网站怎么样
  • 什么事三合一网站工程资料类网站怎么做
  • 成品网站10款平台网站建设制作
  • 北京制作网站多少钱北京最大的网站建设有限公司
  • dw怎样做网站切换网站交给别人做安全吗
  • 龙华区深圳北站可以做用户旅程图的网站
  • 鞍山网站制作推广seo 优化一个月费用
  • 做公众号必了解的网站产品网站 模板
  • 赣州销售网站施工企业资质增项
  • python做问卷调查的网站私人网站管理软件
  • 东湖南昌网站建设公司装潢设计师培训班学费
  • 重庆建一个网站如何做线上销售
  • 建站系统搭建音乐网站网站开发前端招聘
  • 做网站是百度包年快照网站制作便宜
  • 做一个企业网站需要多长时间阿里云服务器的网站备案流程
  • 网站制作与网站建设分销商城网站建设
  • 网站做子站点有什么用广州互联网公司
  • 扶贫网站建设的意义集团公司手机站网站
  • 苏州教育平台网站建设wordpress 导航函数
  • 电商网站设计规范西安做网站公司有哪些