转自:https://blog.youkuaiyun.com/xcjlanqiu/article/details/44590433
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://blog.youkuaiyun.com/DreamFreeLancer/article/details/4150165
文中给出了在linux下获得毫秒级时间的思路,并给出了相关代码。
测试代码如下:
linux:
#include <stdio.h>
#include <string.h>
#include <sys/time.h>
#define TEST_LOOPS 10000000
int main()
{
time_t tm;
struct timeval tv1, tv2, tv_test;
int i;
gettimeofday(&tv1, NULL);
for(i = 0; i < TEST_LOOPS; i ++)
{
gettimeofday(&tv_test, NULL);
}
gettimeofday(&tv2, NULL);
printf("run gettimeofday %u times, used %u usec.\n", TEST_LOOPS,
(tv2.tv_sec – tv1.tv_sec) * 1000000 +
tv2.tv_usec – tv1.tv_usec);
gettimeofday(&tv1, NULL);
for(i = 0; i < TEST_LOOPS; i ++)
{
time(&tm);
}
gettimeofday(&tv2, NULL);
printf("run time %u times, used %u usec.\n", TEST_LOOPS,
(tv2.tv_sec – tv1.tv_sec) * 1000000 +
tv2.tv_usec – tv1.tv_usec);
return 0;
}
windows:
// tick.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "Windows.h"
#define TEST_LOOPS 10000000
int _tmain(int argc, _TCHAR* argv[])
{
int i = 0;
unsigned int tv1, tv2, tv_test;
tv1 = GetTickCount();
for(; i < TEST_LOOPS; i ++)
{
tv_test = GetTickCount();
}
tv2 = GetTickCount();
printf("run GetTickCount %u times, used %u msec, current tick: %u.\n",
TEST_LOOPS, tv2 – tv1, tv2);
return 0;
}
这篇的测试结果比较老,下一篇用现在的环境测试一下