导航:首页 > 操作系统 > android时间相减

android时间相减

发布时间:2022-08-20 15:46:21

A. 如何在android下采用相对时间,实现超时等待的功能

一、函数功能说明

pthread_cond_timedwait 等待一个条件变量,或者超时就会返回

POSIX有两种时钟类型

1、CLOCK_REALTIME: 系统范围内的实时时钟,是个软件时钟,可以通过命令等方式修改该系统时间.
2、CLOCK_MONOTONIC:系统起机时到现在的时间,不能被设置和修改.

pthread_cond_timedwait()在没有设置条件变量属性的时候,默认用的是CLOCK_REALTIME软件时间,
因此在极端情况下会出现实际等待的时间与设置的超时时间不同。
所以,对于linux的超时等待功能,最好是使用CLOCK_MONOTONIC进行实现,并且通过pthread_condattr_setclock实现。

而对于android系统而言,是不支持pthread_condattr_setclock,通过验证可以采用函数pthread_cond_timedwait_monotonic实现。

下面直接给出代码的实现功能。

二、超时等待功能

[cpp] view plain
#include <stdio.h>
#include <string.h>
#include <pthread.h>
#include <sys/time.h>
#include <sys/times.h>
#include <unistd.h>
#include <time.h>

static pthread_mutex_t s_mut = PTHREAD_MUTEX_INITIALIZER;
static pthread_cond_t s_cond = PTHREAD_COND_INITIALIZER;

void PthreadAttr_Init(void);
unsigned long long getSysTime(void);
void waitTimeout(void);

void PthreadAttr_Init(void)
{
#if defined(ANDROID)

#else
pthread_condattr_t cattr;
int iRet = -1;
iRet = pthread_condattr_init(&cattr);
if (iRet != 0)
{
return;
}
pthread_mutex_init(&s_mut, NULL);
pthread_condattr_setclock(&cattr, CLOCK_MONOTONIC);
pthread_cond_init(&s_cond, &cattr);
pthread_condattr_destroy(&cattr);
#endif
return;
}

void waitTimeout(void)
{
unsigned long long ullbefore = getSysTime();
unsigned long long ullafter = 0;

#if defined(ANDROID)

#if defined(HAVE_PTHREAD_COND_TIMEDWAIT_MONOTONIC) // 支持ANDROID下NDK的编译,采用相对时间
struct timespec outtime;
memset(&outtime, 0x00, sizeof(struct timespec ));
clock_gettime(CLOCK_MONOTONIC, &outtime);
outtime.tv_sec += 2;
pthread_mutex_lock(&s_mut);
pthread_cond_timedwait_monotonic(&s_cond,&s_mut, &outtime);
pthread_mutex_unlock(&s_mut);
ullafter = getSysTime();
printf("####01 interval[%lld] ms\n", ullafter - ullbefore);
#else //支持ANDROID下NDK的编译,采用绝对时间
struct timeval now;
struct itmespec outtime;
gettimeofday(&now, NULL);
outtime.tv_sec = now..tv_sec + 3;
outtime.tv_nsec = now.tv_usec * 1000;
pthread_mutex_lock(&s_mut);
pthread_cond_timedwait(&s_cond, &s_mut, &outtime);
pthread_mutex_unlock(&s_mut);
ullafter = getSysTime();
printf("####02 interval[%lld] ms\n", ullafter - ullbefore);
#endif

#else // 支持LINUX下的编译,采用绝对时间
struct timespec outtime;
memset(&outtime, 0x00, sizeof(struct timespec ));
clock_gettime(CLOCK_MONOTONIC, &outtime);
outtime.tv_sec += 4;
pthread_mutex_lock(&s_mut);
pthread_cond_timedwait(&s_cond, &s_mut, &outtime);
pthread_mutex_unlock(&s_mut);
ullafter = getSysTime();
printf("####03 interval[%lld] ms\n", ullafter - ullbefore);
#endif
return;
}

unsigned long long getSysTime(void)
{
unsigned long long milliseconds = 0;

struct tms t_tmsTime;
clock_t t_CurTime;
static int s_clks_per_sec = 0;

if (s_clks_per_sec == 0)
{
s_clks_per_sec = sysconf(_SC_CLK_TCK);
}

if (s_clks_per_sec == 0)
{
return 0;
}

t_CurTime = times(&t_tmsTime);

if (1000 % s_clks_per_sec == 0)
{
milliseconds = (1000 /s_clks_per_sec)*(unsigned long long )t_CurTime;//换算成毫秒
}
else
{
milliseconds = 1000 * (unsigned long long )t_CurTime/s_clks_per_sec;//换算成毫秒
}

return milliseconds;
}

int main(void)
{
PthreadAttr_Init();
waitTimeout();
return 0;
}

编译命令:
gcc test_ptthrad_conf_timewait_monotonic.c -o test_ptthrad_conf_timewait_monotonic -lpthread -lrt

linux下的测试结果:
####03 interval[4010] ms

B. Android如何计算时间差

你先获取一个时间system.cur..获取时间然后保存到一个long里边在第二次获取的时候就可以减去第一个时间了。尤其在判断点击两次退出程序的时候很管用的。

C. android studio怎么显示方法耗时

你在方法开始和结束时都获得一次当前时间 两者相减就是方法所耗时间了

D. Android开发秒表如何避免时间差

Android开发秒表避免时间差:
可以利用系统时间,首先秒表开始的时候获取一个系统时间作为初始时间。然后设置一个Timer来定时获取现在距离初始时间的时间差,再赋值给秒表时间,这样秒表时间与系统时间就可以实现同步了。误差会有,但是用户已经不会感觉出来了。

E. android 计算时间多少分钟前

你这问题的核心就是计算时间差啊,网上代码很多的。
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try
{
Date d1 = df.parse("2006-05-26 12:00:00");
Date d2 = df.parse("2006-07-02 11:20:00");
//Date d2 = new Date(System.currentTimeMillis());//你也可以获取当前时间
long diff = d1.getTime() - d2.getTime();//这样得到的差值是微秒级别
long days = diff / (1000 * 60 * 60 * 24);
long hours = (diff-days*(1000 * 60 * 60 * 24))/(1000* 60 * 60);
long minutes = (diff-days*(1000 * 60 * 60 * 24)-hours*(1000* 60 * 60))/(1000* 60);

System.out.println(""+days+"天"+hours+"小时"+minutes+"分");
}
catch (Exception e)
{
}

F. 怎么实现系统时间相减得到分钟 安卓

try {
java.util.Date nowdate = new Date();
java.util.Date setdate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
.parse("2014-05-28 18:30:59");
long between = (setdate.getTime() - nowdate.getTime());
boolean result = between < 1000 * 60 * 60;
System.out.println(result);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

public boolean isOneHourPassed() {
boolean result=false;
try {
java.util.Date nowdate = new Date();
String schDate = date+" "+timeSet ? time : "23:59";
java.util.Date setdate = new SimpleDateFormat("yyyy-MM-dd HH:mm")
.parse(schDate);
long between = (setdate.getTime() - nowdate.getTime());
result = between < 1000 * 60 * 60;

} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
}

G. android中如何比较两个时间的先后

首先确定这两个时间是同一个时区的(这样才有可比性)。建议使用UTC零时区时间。
然后通过SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddhhmmss");
把时间格式转化为年月日时分秒的一串数字。
把得到的String强制转化为int进行比较。
我也没做过,不过希望能给你一个参考方案。

H. android 如何在ACTION_MOVE算出手指在屏幕上拖动的距离,和拖动的时间

switch (action) {
case MotionEvent.ACTION_DOWN:
DownX = event.getX();//float DownX
DownY = event.getY();//float DownY
currentMS = System.currentTimeMillis();//long currentMS 获取系统时间
break;
case MotionEvent.ACTION_MOVE:
float moveX = event.getX() - DownX;//X轴距离
float moveY = event.getY() - DownY;//y轴距离
long moveTime = System.currentTimeMillis() - currentMS;//移动时间
break;
case MotionEvent.ACTION_UP:
break;
}

I. 问个关于安卓开发中的时间相减的问题

try {
java.util.Date nowdate = new Date();
java.util.Date setdate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
.parse("2014-05-28 18:30:59");
long between = (setdate.getTime() - nowdate.getTime());
boolean result = between < 1000 * 60 * 60;
System.out.println(result);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

阅读全文

与android时间相减相关的资料

热点内容
ubuntu1404安装php 浏览:628
lua能编译吗 浏览:106
思仙怎么看服务器 浏览:656
php微信图片防盗链 浏览:796
安卓1怎么读音 浏览:287
农业app怎么开通快捷支付 浏览:908
pythonredisdict 浏览:383
如何攻击别人网赌服务器 浏览:878
隐私与应用加密的图案密码 浏览:34
陈情令王一博解压 浏览:35
c编译器使用说明 浏览:705
郑州前端程序员私活有风险吗 浏览:14
小型螺杆机压缩机 浏览:518
成人解压最好的方法 浏览:52
最小制冷压缩机 浏览:490
xampp支持python 浏览:367
深圳周立功单片机 浏览:61
圆上点与点之间角度算法 浏览:869
怎么知道微信关联了哪些app 浏览:702
android事件驱动 浏览:888