设为首页 加入收藏

TOP

双平台下的计时函数总结
2014-04-06 17:41:21 来源: 作者: 【 】 浏览:121
Tags:双平 台下 计时 函数 总结

  本文对Windows及Linux平台下常用的计时函数进行总结,包括精度为秒、毫秒、微秒三种精度的各种函数。

  比如Window平台下特有的Windows API函数GetTickCount()、timeGetTime()、及QueryPerformanceCounter(),

  Linux平台下特有的gettimeofday()函数,以及标准的C/C++函数time()和clock()。下面分别对此进行简单介绍并附上示例代码。

  通用的C/C++计时函数time()和clock()

  time_t time(time_t *timer);

  返回以格林尼治时间(GMT)为标准,从1970年1月1日00:00:00到现在的此时此刻所经过的秒数。

  time_t实际是个long长整型typedef long time_t;

  clock_t clock(void);

  返回进程启动到调用函数时所经过的CPU时钟计时单元(clock tick)数,在MSDN中称之为挂钟时间(wal-clock),以毫秒为单位。

  clock_t实际是个long长整型typedef long clock_t;

  Window平台特有函数

  DWORD timeGetTime(void);

  返回系统时间,以毫秒为单位。系统时间是从系统启动到调用函数时所经过的毫秒数。注意,这个值是32位的,会在0到2^32之间循环,约49.71天。

  DWORD WINAPI GetTickCount(void);

  这个函数和timeGetTime()一样也是返回系统时间,以毫秒为单位。

  高精度计时,以微秒为单位(1毫秒=1000微秒)。

  BOOL QueryPerformanceCounter(LARGE_INTEGER *lpPerformanceCount);得到高精度计时器的值(如果存在这样的计时器)。

  BOOL QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency);返回硬件支持的高精度计数器的频率(次每秒),返回0表示失败。

  其中LARGE_INTEGER其实是一个联合体,可以得到__int64 QuadPart;也可以分别得到低32位DWORD LowPart和高32位的值LONG HighPart。

  在使用时,先使用QueryPerformanceFrequency()得到计数器的频率,再计算二次调用QueryPerformanceCounter()所得的计时器值之差,

  用差去除以频率就得到精确的计时了。

  Linux平台特有函数

  int gettimeofday(struct timeval *tv,struct timezone *tz);

  获得当前精确时间(1970年1月1日到现在的时间),精度为微秒。

  保存时间的结构体

  strut timeval {

  long tv_sec; //秒数

  long tv_usec; //微秒数

  };

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇c语言undefined reference&n.. 下一篇USACO 2004 OPEN ..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: