#include <time.h>
// 返回自系统开机以来的毫秒数(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严重影响效率。
摘自:http://1.guotie.sinaapp.com/?p=157
博客来源:http://www.geaya.com/2013/11/impl-of-gettickcount-in-linux.html