前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++ 计时

C++ 计时

作者头像
为为为什么
发布2023-03-24 10:44:48
7860
发布2023-03-24 10:44:48
举报
文章被收录于专栏:又见苍岚

C++ 中计时是度量系统性能的常用方法,本文记录 C++ 常用计时方法。

time.h

time.h 是最常用的 C++ 计时头文件,在 C++ 中,计时通常使用 <time.h> 头文件中的 clock() 函数记录CPU 单元的运行周期时间,可以在 Windows / Linux 等操作系统中使用,配合 CLOCKS_PER_SEC 实现对真实事件单位秒(s)等的转换。

  • 两次调用 clock() 函数,差值表示程序运行开始和结束时刻之间的CPU时钟计时单元(clock tick)数;
  • CLOCKS_PER_SEC,表示一秒钟会有多少个时钟计时单元(clock tick);
  • 设差值为 durationduration / CLOCKS_PER_SEC 就为秒。
数据类型

计时得到的常用数据类型是 clock_ttime_t, 在 time.h 文件中,我们可以找到对它们的定义:

  • clock_t
代码语言:javascript
复制
#ifndef _CLOCK_T_DEFINED 

  typedef long clock_t; 

  #define _CLOCK_T_DEFINED 

  #endif

说明 clock_t 类型本质就是 long 类型

  • time_t
代码语言:javascript
复制
typedef long                          __time32_t;
typedef __int64                       __time64_t;

#ifndef _CRT_NO_TIME_T
    #ifdef _USE_32BIT_TIME_T
        typedef __time32_t time_t;
    #else
        typedef __time64_t time_t;
    #endif
#endif

说明 time_t 可能是 32 位整形或 64 位整形

  • 总之时间本质就是一个大整形数据
计时间隔

一个 clock 表示一个计时间隔,每经过一个计时间隔的时间这个计时的整数会增加 1

计时间隔 和真实时间的联系靠的是 CLOCKS_PER_SEC,这个宏的含义是一秒钟有多少个计时间隔

在定义中 CLOCKS_PER_SEC 是 1000

代码语言:javascript
复制
#define CLOCKS_PER_SEC  ((clock_t)1000)

也就表示一个 计时间隔 表示 1ms 的时间

示例代码
代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <iostream>

using namespace std;


int main(void)
{
    long    i = 100000000L;
    time_t start, finish;
    double  duration;
    /* 测量一个事件持续的时间*/
    printf("Time to do %ld empty loops is ", i);
    start = clock();
    while (i--)
        ;
    finish = clock();
    duration = (double)(finish - start) / CLOCKS_PER_SEC;
    printf("%f seconds\n", duration);
    return 0;
}

输出

代码语言:javascript
复制
Time to do 100000000 empty loops is 0.148000 seconds

参考资料

文章链接:

https://cloud.tencent.com/developer/article/2245187

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023年3月22日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • time.h
    • 数据类型
      • 计时间隔
        • 示例代码
        • 参考资料
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档