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写入。