wow-countdown倒计时操作说明

本文详细介绍了WowIoT项目中wow-countdown文件的核心功能,包括倒计时对象的创建、释放、参数重置和设置、查询剩余时间和判断是否超时的方法。
摘要由CSDN通过智能技术生成

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));
}
Android中实现HH-mm-ss格式的倒计时通常需要使用`Handler`或`Timer`类来周期性更新UI。以下是一个基本的实现思路: 1. 定义倒计时的总秒数,然后将这个总秒数转换成小时、分钟和秒。 2. 创建一个`Handler`或`Timer`对象,用以周期性地执行倒计时更新操作。 3. 在每次周期到的时候,更新UI上的时间显示,并且减少相应的秒数。 4. 当倒计时结束时,移除更新操作,并可以执行一些如显示提示或者停止计时器的操作。 以下是一个简化的代码示例,使用`Handler`来实现倒计时: ```java // 假设有一个TextView用于显示倒计时时间 TextView countdownTextView = findViewById(R.id.countdown_textview); // 设置倒计时的总秒数 int totalSeconds = 1800; // 例如30分钟 // 更新UI的Handler final Handler handler = new Handler(); // 更新倒计时时间 final Runnable runnableCode = new Runnable() { @Override public void run() { int seconds = totalSeconds % 60; totalSeconds = (totalSeconds - seconds) / 60; int minutes = totalSeconds % 60; totalSeconds = (totalSeconds - minutes) / 60; int hours = totalSeconds; // 格式化输出时间 String time = String.format("%02d:%02d:%02d", hours, minutes, seconds); // 更新TextView显示时间 countdownTextView.setText(time); // 如果倒计时还未结束,继续更新 if (totalSeconds > 0) { handler.postDelayed(this, 1000); } else { // 倒计时结束 countdownTextView.setText("00:00:00"); // 可以在这里添加倒计时结束后的操作 } } }; // 开始倒计时 handler.post(runnableCode); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值