java gettickcount_linux上的GetTickCount函数

java gettickcount_linux上的GetTickCount函数include 返回自系统开机以来的毫秒数 tick unsignedlong structtimesp clock gettime CLOCK MONOTONIC amp ts return ts tv sec 1000 ts tv nsec intmain structtimesp

#include

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

unsigned long GetTickCount()

{

struct timespec ts;

clock_gettime(CLOCK_MONOTONIC, &ts);

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

}

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/

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

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

// 返回自系统开机以来的毫秒数(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 / );

}

附: 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严重影响效率。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/228339.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月16日 下午7:15
下一篇 2026年3月16日 下午7:16


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号