timer.c

来自「IEEE1588 Protocol,用于同步局域网各站点时间」· C语言 代码 · 共 87 行

C
87
字号
/* timer.c */#include "../ptpd.h"#define TIMER_INTERVAL 1int elapsed;void catch_alarm(int sig){  elapsed += TIMER_INTERVAL;    DBGV("catch_alarm: elapsed %d\n", elapsed);}void initTimer(void){  struct itimerval itimer;    DBG("initTimer\n");    signal(SIGALRM, SIG_IGN);    elapsed = 0;  itimer.it_value.tv_sec = itimer.it_interval.tv_sec = TIMER_INTERVAL;  itimer.it_value.tv_usec = itimer.it_interval.tv_usec = 0;    signal(SIGALRM, catch_alarm);  setitimer(ITIMER_REAL, &itimer, 0);}void timerUpdate(IntervalTimer *itimer){  int i, delta;    delta = elapsed;  elapsed = 0;    if(delta <= 0)    return;    for(i = 0; i < TIMER_ARRAY_SIZE; ++i)  {    if(itimer[i].interval > 0 && (itimer[i].left -= delta) <= 0)    {      itimer[i].left = itimer[i].interval;      itimer[i].expire = TRUE;      DBGV("timerUpdate: timer %u expired\n", i);    }  }}void timerStop(UInteger16 index, IntervalTimer *itimer){  if(index >= TIMER_ARRAY_SIZE)    return;    itimer[index].interval = 0;}void timerStart(UInteger16 index, UInteger16 interval, IntervalTimer *itimer){  if(index >= TIMER_ARRAY_SIZE)    return;    itimer[index].expire = FALSE;  itimer[index].left = interval;  itimer[index].interval = itimer[index].left;    DBGV("timerStart: set timer %d to %d\n", index, interval);}Boolean timerExpired(UInteger16 index, IntervalTimer *itimer){  timerUpdate(itimer);    if(index >= TIMER_ARRAY_SIZE)    return FALSE;    if(!itimer[index].expire)    return FALSE;    itimer[index].expire = FALSE;    return TRUE;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?