wow-countdown文件说明
- 项目地址:https://gitee.com/wow-iot/wow-iot7
- 本文件的功能主要用于处理定时器操作,主要涉及申请、释放、复位与置数、查询剩余时间、查询是否超时;
申请倒计时
CountDown_T* wow_cdown_new(void)
{
CountDown_T* cdown = CALLOC(1,CountDown_T);
CHECK_RET_VAL_P(cdown,NULL,"malloc CountDown_T failed!\n");
cdown->time = (struct timeval){0, 0};
return cdown;
}
void wow_cdown_free(CountDown_T** pptCdown)
{
CHECK_RET_VOID(pptCdown && *pptCdown);
FREE(*pptCdown);
*pptCdown = NULL;
}
倒计时参数置0
void wow_cdown_reset(CountDown_T* ptCdown)
{
CHECK_RET_VOID(ptCdown);
ptCdown->time = (struct timeval){0, 0};
}
倒计时参数置数
void wow_cdown_set(CountDown_T* ptCdown, size_t nMsec)
{
CHECK_RET_VOID(ptCdown);
struct timeval now;
gettimeofday(&now, NULL);
struct timeval interval = {nMsec / 1000, (nMsec % 1000) * 1000};
timeradd(&now, &interval, &ptCdown->time);
}
查询倒计时剩余时间
int wow_cdown_remain(CountDown_T* ptCdown)
{
CHECK_RET_VAL(ptCdown,0);
struct timeval now, res;
gettimeofday(&now, NULL);
timersub(&ptCdown->time, &now, &res);
return (res.tv_sec < 0) ? 0 : res.tv_sec * 1000 + res.tv_usec / 1000;
}
判断倒计时是否超时
int wow_cdown_is_expired(CountDown_T* ptCdown)
{
CHECK_RET_VAL(ptCdown,0);
struct timeval now, res;
gettimeofday(&now, NULL);
timersub(&ptCdown->time, &now, &res);
return ((res.tv_sec < 0) || (res.tv_sec == 0 && res.tv_usec <= 0));
}