10-6 计算时间差

2023-11-01

        时间差可以用来衡量程序运行效率,计算其有三种方法,一是使用 difftime() 函数,二是使用自定义的 TimeInMillisecond() 函数,三是使用 clock() 函数

1. 使用 difftime() 函数计算秒级时间差

        三种方法本质相同,都是利用执行程序前的时间和程序执行后的时间进行时间差的计算。需要注意的是,difftime() 函数传入的参数为 time_t 类型,这意味着时间精度是秒级。最终程序运行结果为 times: 0.000000,说明程序运行速度过快,秒级精度无法获取真实的程序运行时间。

#include <stdio.h>
#include <time.h>

void DoHardWork(){

  int sum = 0;
  for (int i = 0; i < 100000000; ++i) {
    sum += i*i / 3;
  }
}

void TestDifftime(){

  time_t start_time = time(NULL);
  DoHardWork();
  time_t end_time = time(NULL);

  double times = difftime(start_time, end_time);

  printf("times: %lf", times);  // times: 0.000000
}

2. 使用 TimeInMillisecond() 函数计算毫秒级时间差

        若要计算毫秒级精度的时间差,time_t 时间类型需要放弃使用。使用自定义的 TimeInMillsecond() 函数获取毫秒级时间戳,而后相减,便可得到毫秒级时间差。此时程序结果为 197ms。

void TestTimeInMillisecond(){

  long_time_t start_time = TimeInMillisecond();
  DoHardWork();
  long_time_t end_time = TimeInMillisecond();

  printf("times: %lld\n", end_time - start_time);  // times: 197
}

3. 使用 clock() 函数计算程序消耗的处理器时间

        clock() 函数的返回类型是 clock_t,其不是以真实世界的时间为单位,而是以时钟为单位。每一秒,CPU 会分配 CLOCKS_PER_SEC 个时钟给程序。利用程序执行前后的时钟数量,可以计算出程序的运行时间。

void TestClock(){
  clock_t start_clock = clock();
  DoHardWork();
  clock_t end_clock = clock();

  // 这里的差值是时钟数量,需要转换为秒数
  // CLOCKS_PER_SEC: 每一秒有多少个时钟
  double times = (end_clock - start_clock) * 1.0 / CLOCKS_PER_SEC;

  printf("times: %lf", times);  // times: 0.224000s
}

        程序最终运行结果为 times: 0.224000s。可以发现,与 TimeInMillisecond() 函数的执行结果相比,clock() 函数计算出的时间更长些。原因如下图所示:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

10-6 计算时间差 的相关文章

随机推荐

  • openGL之API学习(八十四)glGetObjectLabel

    获取命名空间对象的标签 打标签由函数glObjectLabel执行 void glGetObjectLabel GLenum identifier GLuint name GLsizei bufSize GLsizei length cha
  • HTTP反爬困境

    尊敬的程序员朋友们 大家好 今天我要和您分享一篇关于解决反爬困境的文章 在网络爬虫的时代 许多网站采取了反爬措施来保护自己的数据资源 然而 作为程序员 我们有着聪明才智和技术能力 可以应对这些困境并确保数据的安全性 本文将重点介绍如何通过H
  • 如何把简单的事情一次做对?

    在工作中领导最讨厌的人就是总把简单的事情做错的下属 在绝大多数人不会犯错的地方犯错 在领导眼中会判定为是基本素质问题 是不可原谅的 如果组织要裁员 那优先裁掉的就是哪些总是犯低级错误的人 那如何确保能够把简单的事情一次做对 提升自己的职场竞
  • 好用用的linux 监控命令

    1 dstat 命令 参考http www cnblogs com vincent hv p 3358194 html dstat的基本使用 2 1 dstat的默认选项 与许多命令一样 dstat命令有默认选项 执行dstat命令不加任何
  • Angular_与服务器通讯(Websocket通讯)

    在上一篇文章中 我们创建了server服务 在那个项目中我们继续添加websocket服务 npm install ws save 然后安装types格式的 npm install types ws save dev 实现场景 编写服务端
  • “终于懂了” 系列:组件化框架 ARouter 完全解析(二)APT技术

    ARouter系列文章 终于懂了 系列 组件化框架 ARouter 完全解析 一 原理全解 终于懂了 系列 组件化框架 ARouter 完全解析 二 APT 帮助类生成 终于懂了 系列 组件化框架 ARouter 完全解析 二 AGP Tr
  • 物理服务器向虚拟化无缝对接,服务器虚拟化下的网络变迁

    一个风起 云 涌的IT时代 展现的是一种全新的动态IT基础设施 和传统的IT基础设施相比 虚拟化成为目前整个IT基础架构的变革性创新技术 对计算 存储 网络都产生了长远的影响 在数据中心等场景中引入虚拟化技术之后 服务器接入网络的位置往往是
  • C++基础——类与对象的讲解2

    目录 一 类域 二 计算类的大小 类存储方式一 类中包含各个成员 包括函数在内 类存储方式二 类的存储方式三 练习题 三 C 结构内存对齐规则 一 类域 其实类也是个域 拥有一对花括号 它与我们之前学习的命名空间域有相似之处 但也大有不同
  • ovftool工具的使用

    1 工具下载地址 https customerconnect vmware com zh downloads details downloadGroup OVFTOOL440 productId 974 download true file
  • js是实现键盘设置日期(input)

    本功能是基于封装的datetime input框进行的二次封装 加上上下左右修改日期的功能 只提供一种思路 前端框架aurelia formatString formatString country MM DD YY h mm A USA
  • 监控显示服务器超时,国标GB/T28181流媒体服务互联网直播方案EasyGBS录像调取报超时错误如何解决?...

    原标题 国标GB T28181流媒体服务互联网直播方案EasyGBS录像调取报超时错误如何解决 背景分析 视频监控整合人工智能技术 虽然在加强监控的同时也伴随着一些潜在风险 但是潜在的优点显然超过了缺点 且如今人工智能在算法与芯片领域的成熟
  • Packet for query is too large

    mysql 执行insert语句时 提示Packet for query is too large异常 问题点 mysql支持的传输数据包大小超限了 解决办法 比较一劳永逸的方式是直接修改mysql安装目录下的my ini配置文件 增加一行
  • 利用python制作一款截图识别软件

    先给大家推荐一款截图软件 非常方便 可以把截出的图片放置到窗口上 并且可以随意移动 这个是微软开发的一款工具 Snipaste 支持各类电脑系统 先简单介绍一下它的用法 F1截图 ctrl c把图片复制到剪贴板 方便下次使用 ctrl v
  • python协程—asyncio模块

    为什么使用协程 当多线程或者多进程足够多时 实际上并不能解决性能的瓶颈问题 也就是多线程和多进程对小规模的请求可以提高效率 过多的请求实际上会降低服务资源响应效率 因此协程是更好的解决文案 什么是协程 当一个程序遇到阻塞时 如果将这个程序挂
  • (翻译)Linux中的IS_ERR()宏

    本文翻译自 https newbedev com is err macro in linux text 20IS ERR 20 28 29 20macro 20in 20Linux 20Tests 20if can 20find 20MAC
  • VUE3.0生命周期函数

    什么是生命周期 1 vue中每个组件都是独立的 每个组件都有一个属于它的生命周期 2 从一个组件创建 数据初始化 挂载 更新 销毁 这就是一个组件所谓的生命周期 强调的是一个时间段 在vue3中 新增了一个setup生命周期函数 setup
  • 四川岳池2021年高考成绩查询,2021年岳池中学升学率高不高?

    引语 了解一个学校 就要全方位的进行了解 清楚学校的师资 录取分数线 升学率等等 四川初升高升学网网编为同学们梳理了2021年岳池中学升学率高不高的相关信息 更多最新资讯可以关注四川初升高升学网公众号 岳池中学2021升学率 立即点击查看
  • MySQL 表分区 报错:Table has no partition for value XXX

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 对已存在的未分区的表进行分区 alter table test PARTITION BY RANGE id PARTITION p1 VALUES LESS THAN 10
  • 扫码点餐软件,打造智慧餐厅新体验!【点餐小程序】

    随着科技的不断发展 扫码点餐软件成为了越来越多餐厅的选择 它们可以帮助顾客快速方便地点餐 同时也带来了更高效的服务体验和更好的管理效果 在这篇文章中 我们将探讨如何通过扫码点餐软件打造智慧餐厅新体验 并且以一个具体的案例来解析其中的技巧 步
  • 10-6 计算时间差

    时间差可以用来衡量程序运行效率 计算其有三种方法 一是使用 difftime 函数 二是使用自定义的 TimeInMillisecond 函数 三是使用 clock 函数 1 使用 difftime 函数计算秒级时间差 三种方法本质相同 都