time(),gettimeofday()及GetTickCount()效率比较

147 篇文章 14 订阅

转自:http://1.guotie.sinaapp.com/?p=157

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

参考资料:

Linux 下高性能用户空间时间服务_DreamFreeLancer的博客-CSDN博客

文中给出了在linux下获得毫秒级时间的思路,并给出了相关代码。

测试代码如下:

linux:

[c]
#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;
}
[/c]

windows:

[c]
// 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;
}

[/c]

Related posts:

  1. Linux下锁对性能的影响有多大(进程版本)?
  2. socket通信,nonblocking与block发送延迟的测试——client端代码
  3. 多线程的内存池能够提高效率吗?!
  4. Linux x86_64下malloc最大能够分配多少内存[多线程版本]?
  5. __sync_fetch_and_add的测试
  6. 应用可分配的最大内存及malloc

(187条消息) time(),gettimeofday()及GetTickCount()效率比较_MrBetter先生的博客-CSDN博客_gettimeofday效率高吗

gettimeofday函数和time函数都可以用于获取当前时间,但它们有一些区别。 1. gettimeofday函数: gettimeofday函数是一个系统调用,用于获取当前时间的秒数和微秒数。它的原型如下: ```c int gettimeofday(struct timeval *tv, struct timezone *tz); ``` 其中,tv是一个指向timeval结构体的指针,用于存储获取到的时间信息。tz是一个指向timezone结构体的指针,用于存储时区信息。但是在实际使用中,通常将tz设置为NULL即可。 2. time函数: time函数是一个库函数,用于获取当前时间的秒数。它的原型如下: ```c time_t time(time_t *t); ``` 其中,t是一个指向time_t类型的指针,用于存储获取到的时间信息。但是在实际使用中,通常将t设置为NULL即可。 区别: 1. 返回值类型不同: - gettimeofday函数返回0表示成功,返回-1表示失败。 - time函数返回当前时间的秒数。 2. 精度不同: - gettimeofday函数可以获取到微秒级别的时间信息。 - time函数只能获取到秒级别的时间信息。 3. 使用方式不同: - gettimeofday函数需要传入一个指向timeval结构体的指针,用于存储获取到的时间信息。 - time函数可以直接返回当前时间的秒数。 范例:根据提供的引用内容,可以得出以下结论: gettimeofday函数和time函数都可以用于获取当前时间,但是gettimeofday函数可以获取到微秒级别的时间信息,而time函数只能获取到秒级别的时间信息。此外,gettimeofday函数是一个系统调用,而time函数是一个库函数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值