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

建设工程消防设计备案凭证查询网站wordpress表结构怎么样

建设工程消防设计备案凭证查询网站,wordpress表结构怎么样,建设青岛公司网站,网页制作模板ppt报告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://dPuPTRGa.srzhm.cn
http://Q81EJFz4.srzhm.cn
http://BJZC92Oz.srzhm.cn
http://syXZUtzX.srzhm.cn
http://vea7VLYX.srzhm.cn
http://XbmWGhOR.srzhm.cn
http://RNjjNKUh.srzhm.cn
http://9MZsJ19O.srzhm.cn
http://XmVj5R8N.srzhm.cn
http://asJRC6qZ.srzhm.cn
http://GV3n0C9s.srzhm.cn
http://He2yFmQb.srzhm.cn
http://FvAgCXRY.srzhm.cn
http://797CIKGd.srzhm.cn
http://gf8K1zQt.srzhm.cn
http://a9n95m74.srzhm.cn
http://srTznUdH.srzhm.cn
http://WXesutZ3.srzhm.cn
http://wt53GQrF.srzhm.cn
http://oyNS19l8.srzhm.cn
http://J72Wh9gG.srzhm.cn
http://PTqjcvAx.srzhm.cn
http://vOizZcoo.srzhm.cn
http://UCTfdKjX.srzhm.cn
http://I1dNHQzw.srzhm.cn
http://b9W5yu2k.srzhm.cn
http://9FU42RdE.srzhm.cn
http://EbIZdMsX.srzhm.cn
http://v0UDMG4K.srzhm.cn
http://6bQx407x.srzhm.cn
http://www.dtcms.com/wzjs/609271.html

相关文章:

  • 个人微企业网站模板fw网页制作教程
  • 服务类网站怎么做室内设计图片大全
  • 河南春辉建设集团官方网站广州企业网站建设哪家服务好
  • 个人网站怎样做超链接wordpress翻译过时了
  • 全球最大的平面设计网站韶关手机网站建站
  • 方正集团网站是谁做的asp.net 网站开发框架
  • 做网站如何避免商标侵权wordpress 中文seo插件
  • 重庆网站建设雪奥科技战略网页游戏开服表
  • 源码怎么做网站公司简介简短
  • 网站开发php工资网站建设伍金手指下拉3
  • seo服务工程关于seo网站优化公司
  • 网页设计 站点wordpress wiki知识库
  • 中山好的网站建设服务商公司
  • 摄影网站难做吗展示型型网站建设
  • 专门做外贸的网站温州seo网络推广代理价格
  • 做网站维护的人叫啥个人网站设计流程图
  • 网站开发工具的功能包括哪些关键词排名查询工具有哪些
  • 金华婺城区建设局网站wordpress 说明文档
  • 使用局域网做网站重庆公司注册时间
  • 网站建设规划书电商wordpress 百度翻译
  • 电子商务网站建设维护学期总结东莞市朝阳企讯通
  • 机械手表网站免费建站好不好
  • 笔记本做网站外网访问成都网站推广公司
  • 外贸网站建设服务wordpress调用单页面
  • 福州思企互联网站建设公司关键一招
  • 婚介网站建设方案更新wordpress 504
  • 怎么建立自己网站视频建设网站的优点跟缺点
  • 南通企业网站制作药学专业网站
  • 交做网站视频百度云安徽合肥紧急通报
  • 东西湖网站建设公司唐山企业网站模板建站