java gettickcount_linux上的GetTickCount函数

#include

// 返回自系统开机以来的毫秒数(tick)

unsigned long GetTickCount()

{

struct timespec ts;

clock_gettime(CLOCK_MONOTONIC, &ts);

return (ts.tv_sec * 1000 + ts.tv_nsec / 1000000);

}

int main()

{

struct timespec time1 = { 0, 0 };

clock_gettime(CLOCK_REALTIME, &time1);

printf("CLOCK_REALTIME: %d, %d\n", time1.tv_sec, time1.tv_nsec);

clock_gettime(CLOCK_MONOTONIC, &time1);

printf("CLOCK_MONOTONIC: %d, %d\n", time1.tv_sec, time1.tv_nsec);

clock_gettime(CLOCK_MONOTONIC_RAW, &time1);

printf("CLOCK_MONOTONIC_RAW: %d, %d\n", time1.tv_sec, time1.tv_nsec);

clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &time1);

printf("CLOCK_PROCESS_CPUTIME_ID: %d, %d\n", time1.tv_sec,

time1.tv_nsec);

clock_gettime(CLOCK_THREAD_CPUTIME_ID, &time1);

printf("CLOCK_THREAD_CPUTIME_ID: %d, %d\n", time1.tv_sec,

time1.tv_nsec);

printf("\n%d\n", time(NULL));

printf("tick count in ms: %ul\n", GetTickCount());

return 0;

}

---------------------

作者:guang11cheng

来源:CSDN

原文:https://blog.csdn.net/guang11cheng/article/details/6865992

版权声明:本文为博主原创文章,转载请附上博文链接!

敦品厚德格物致知: tv_sec现在取出来, 已经是32bits, tv_sec*1000后转换为unsigned long后会越界. 每隔4294967毫秒, 就会越界一次, 可能算出来的逝去毫秒数比前面取到的毫秒数还小.

// 返回自系统开机以来的毫秒数(tick)

unsigned long GetTickCount()

{

struct timeval tv;

if( gettimeofday(&tv, NULL) != 0 )

return 0;

return (tv.tv_sec * 1000) + (tv.tv_usec / 1000);

}

// 返回自系统开机以来的毫秒数(tick)

unsigned long GetTickCount()

{

struct timespec ts;

clock_gettime(CLOCK_MONOTONIC, &ts);

return (ts.tv_sec * 1000 + ts.tv_nsec / 1000000);

}

附: time()、gettimeofday()及GetTickCount()效率比较 time()和gettimeofday()是linux的系统调用,GetTickCount()是windows的函数。

time:返回至1970-1-1 00:00:00至今的秒数; gettimeofday:除了返回秒数外,还有纳秒数,用于更精确的计时; GetTickCount:返回系统启动至今的毫秒数

使用三个函数,分别调用1千万次,测试结果如下: time:约967毫秒; gettimeofday:约1800毫秒; GetTickCount:约70毫秒;

可见,GetTickCount要快很多很多,在linux系统下,频繁使用time及gettimeofday严重影响效率。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值