timeval结构体的应用

本文介绍了Linux系统中的timeval结构体及其在计时器中的应用。通过gettimeofday()函数获取当前时间,并结合timeval结构体的tv_sec和tv_usec字段,实现了物理按键长按功能的判断,例如在不同时间间隔内触发不同的操作。通过比较当前时间与上一次时间戳的差值,来判断是否达到指定的长按时间。
摘要由CSDN通过智能技术生成

timeval结构体的简单应用

timeval定义

timeval是Linux系统中定义的用于保存时间的结构体,在time.h中的定义为:

struct timeval
{
	__time_t tv_sec;        /* Seconds. */
	__suseconds_t tv_usec;  /* Microseconds. */
};

其中,tv_sec为Epoch到创建struct timeval时的秒数,tv_usec为微秒数,即秒后面的零头。比如当前的tv_sec为1244770435,tv_usec为442388,即当前时间距Epoch时间1244770435秒,442388微秒。1

作为计时器

在做物理按键长按功能复用时,正好用到了timeval结构体,下面是具体实现:

        gettimeofday(&timev, NULL);
		flag = gpio_get_value(GPIO_NUM);
        //ALOGE("fp_process %d ", flag);
        if(flag == 0) {
            //focusStart = true;
            if (lastFlag != flag) {
                old_sec_ble = timev.tv_sec;
                old_sec_focus = timev.tv_sec;
            } else {
                if ((timev.tv_sec - old_sec_focus) > 4) {
                    blePaired = true;
                    old_sec_focus = timev.tv_sec;
                }
            }
        } else {
            if (lastFlag != flag) {
                if (((timev.tv_sec - old_sec_ble) < 4) && (blePaired == false)) {
                    focusStart = true;
                }
            }
        }
           
        lastFlag = flag;
        //短按动作
		if (focusStart == true) {
            focusStart = false;
            ALOGD("fp_process focusStart=true");
            system("input keyevent 281");
		}
        //长按5秒以上动作
        if (blePaired == true) {
            blePaired = false;
            ALOGD("fp_process blePaired=true");
            system("am start -n com.example.bleautopaired/.MainActivity");
        }
         

gettimeofday()声明如下:

extern int gettimeofday (struct timeval *__restrict __tv,
                         __timezone_ptr_t __tz) __THROW __nonnull ((1));

gettimeofday()功能是得到当前时间和时区,分别写到tv和tz中,如果tz为NULL则不向tz写入。


  1. struct timeval结构体 以及 gettimeofday()函数 ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值