wow-countdown倒计时操作说明

发布于:2024-04-19 ⋅ 阅读:(28) ⋅ 点赞:(0)

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));
}