C++ 中的耗时计算函数

#include <time.h>int clock_gettime (clockid_t clock_id, struct timespec *tp) 

获取当前 clock_id 的时钟值并存储在 tp 中。

其中 tp 是一个 timespec 结构体,在 time.h 头文件中定义:

#include <time.h>:struct timespec {time_t   tv_sec;        /* seconds */long     tv_nsec;       /* nanoseconds */
};

clock_id 是识别系统时钟的 ID,常用的定义有以下几种:

  1. CLOCK_REALTIME:这是实际的时间,即从 1970 年 1 月 1 日(UTC)至今的秒数。这种计时方式会受到 NTP(网络时间协议)的影响,系统时间可能会被自动调整。用户可以修改系统时间,但修改后会影响到 CLOCK_REALTIME 的计数。
  2. CLOCK_MONOTONIC:这是单调时间,即从系统启动到现在的时间。CLOCK_MONOTONIC 时钟不受系统时间不连续跳跃的影响(例如,如果系统管理员手动更改时钟),但是受到由 adjtime() 和 NTP 执行的增量调整的影响。在系统休眠(suspend)时,CLOCK_MONOTONIC 会停止增加。
  3. CLOCK_MONOTONIC_RAW:与 CLOCK_MONOTONIC 类似,但不同之处在于它不会受到 NTP 的影响。即使 NTP 服务器和本地的时钟硬件之间存在问题,NTP 也不会影响到 CLOCK_MONOTONIC_RAW 的频率。该时钟 ID 从 Linux 2.6.28 内核开始引入,Linux 特有。
  4. CLOCK_BOOTTIME:与 CLOCK_MONOTONIC 类似,当系统进入休眠(suspend)时,它会继续增加。

可以通过「man 3 clock_gettime」命令查阅 Linux 手册获取 clock_id 更详细信息。

我们通过以下示例来展示程序运行耗时的计算方法:

#include <time.h>int main(int argc, char const *argv[])
{struct timespec start, end;clock_gettime(CLOCK_MONOTONIC_RAW, &start);func_or_code_here();    // your code ...clock_gettime(CLOCK_MONOTONIC_RAW, &end);long elapsed_ms = (end.tv_sec - start.tv_sec) * 1000 + (end.tv_nsec - start.tv_nsec) / 1e6;return 0;
}

在上面的示例中,通过 clock_gettime() 函数获取运行时刻的实际时间并存储在 startend 两个变量中,然后计算经过的时间(毫秒),最后得出函数运行耗时。

以下是一种 C++ 的封装方式,文件名为 timer.h,仅供参考:

#include <time.h>class Timer {
public:Timer() {reset();}~Timer() = default;long elapsed_sec() {clock_gettime(CLOCK_MONOTONIC_RAW, &_end);return (_end.tv_sec - _start.tv_sec) + (_end.tv_nsec - _start.tv_nsec) / 1e9;        }long elapsed_ms() {clock_gettime(CLOCK_MONOTONIC_RAW, &_end);return (_end.tv_sec - _start.tv_sec) * 1000 + (_end.tv_nsec - _start.tv_nsec) / 1e6;}long elapsed_us() {clock_gettime(CLOCK_MONOTONIC_RAW, &_end);return (_end.tv_sec - _start.tv_sec) * 1e6 + (_end.tv_nsec - _start.tv_nsec) / 1000;}long elapsed_ns() {clock_gettime(CLOCK_MONOTONIC_RAW, &_end);return (_end.tv_sec - _start.tv_sec) * 1e9 + (_end.tv_nsec - _start.tv_nsec);}void reset() {clock_gettime(CLOCK_MONOTONIC_RAW, &_start);}private:struct timespec _start;struct timespec _end;
};

在以上的封装过程中,在 Timer 类中定义了 _start_end 成员变量,用于存储开始时间与结束时间,Timer 类提供了计算耗时的秒(elapsed_sec),毫秒(elapsed_ms),微秒(elapsed_us),纳秒(elapsed_ns)的成员函数。同时提供了 reset 函数用于重新计时。在这里我们可以通过以下示例来更好地理解 Timer 的用法:

#include <iostream>
#include "timer.h"int main(int argc, char const *argv[])
{Timer t;func_or_code_here();    // your code ...long elapsed_ms = t.elapsed_ms();return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/597759.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java重修第二天—学习”方法“

通过学习本篇文章可以掌握如下知识 1、方法的定义 2、方法在计算机中的执行流程。 3、方法使用时常见问题 4、Java中方法的参数传递机制 5、方法重载 1 方法是什么 方法是一种语法结构&#xff0c;它可以把一段代码实现的某种功能封装起来&#xff0c;以便重复利用。 方…

第二百四十五

我们在上一章回中介绍了"修改页面导航中遇到的问题"沉浸式状态样相关的内容&#xff0c;本章回中将介绍如何修改Avatar的大小.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我们在正常使用CirCleAvatar组件时可以通过该组件的radius属性来修改它的…

Java调用百度云语音识别【音频转写】

百度云文档 ttps://ai.baidu.com/ai-doc/SPEECH/Bk5difx01 示例代码: import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import lombok.extern.slf4j.Slf4j; import okhttp3.*; import org.json.JSONObject; import org.springframework.stereotyp…

目标检测-One Stage-YOLO v3

文章目录 前言一、YOLO v3的网络结构和流程二、YOLO v3的创新点总结 前言 根据前文目标检测-One Stage-YOLOv2可以看出YOLOv2的速度和精度都有相当程度的提升&#xff0c;但是精度仍较低&#xff0c;YOLO v3基于一些先进的结构和思想对YOLO v2做了一些改进。 提示&#xff1a;…

多端多平台高性能推理引擎

多端多平台高性能推理引擎是AI模型产业应用的关键环节&#xff0c;被视为AI落地的最后一公里。具体来说&#xff0c;这种推理引擎需要部署在多种场景和平台上&#xff0c;包括服务器端、边缘端、移动端和网页前端等&#xff0c;同时还需要满足不同的性能要求。 由于部署环境和…

突破技术边界:R与jsonlite库探秘www.snapchat.com的数据之旅

概述 Snapchat是一款流行的社交媒体应用&#xff0c;它允许用户发送和接收带有滤镜和贴纸的照片和视频&#xff0c;以及创建和观看故事和发现内容。Snapchat的数据是非常有价值的&#xff0c;因为它可以反映用户的行为、偏好和趋势。然而&#xff0c;Snapchat的数据并不容易获…

【LMM 009】MiniGPT-4:使用 Vicuna 增强视觉语言理解能力的多模态大模型

论文描述&#xff1a;MiniGPT-4: Enhancing Vision-Language Understanding with Advanced Large Language Models 论文作者&#xff1a;Deyao Zhu∗ Jun Chen∗ Xiaoqian Shen Xiang Li Mohamed Elhoseiny 作者单位&#xff1a;King Abdullah University of Science and Techn…

JavaScript DOM—节点操作

Hi i,m JinXiang ⭐ 前言 ⭐ 本篇文章主要介绍在在JavaScript DOM 节点操作以及部分理论知识 &#x1f349;欢迎点赞 &#x1f44d; 收藏 ⭐留言评论 &#x1f4dd;私信必回哟&#x1f601; &#x1f349;博主收将持续更新学习记录获&#xff0c;友友们有任何问题可以在评论区…

oracle json包 解析JSON

Oracle数据库中的JSON功能包可以用来解析和处理JSON数据。该功能包提供了一组用于解析和操作JSON数据的函数和过程。 要使用JSON功能包解析JSON数据&#xff0c;首先需要将JSON数据保存为一个Oracle数据库中的JSON类型的列或变量。然后&#xff0c;可以使用JSON功能包中的函数…

亚信安慧AntDB数据库:企业核心业务系统数据库升级改造的可靠之选

在近期召开的“2023年国有企业应用场景发布会”上&#xff0c;亚信安慧公司的核心数据库产品AntDB闪耀登场&#xff0c;技术总监北陌先生针对企业核心业务系统数据库升级改造的关键议题发表了深度分享。他从研发、工程实施和运维管理三个维度细致剖析了当前企业在进行数据库升级…

Python - 深夜数据结构与算法之 DP - 进阶

目录 一.引言 二.经典算法实战 1.House-Robber [198] 2.House-Robber-2 [213] 3.Best-Sell-Time [121] 4.Best-Sell-Time-2 [122] 5.Best-Sell-Time-3 [123] 6.Best-Sell-Time-4 [188] 7.Best-Sell-Time-Coldown [309] 8. Best-Sell-Time-Fee [714] 三.总结 一.引言…

操作系统原理

操作系统原理 大家好&#xff0c;我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天&#xff0c;让我们一同探索计算机科学领域中的基石之一——操作系统原理。 1. 什么是操作系统原…

【React系列】父子组件通信—props属性传值

本文来自#React系列教程&#xff1a;https://mp.weixin.qq.com/mp/appmsgalbum?__bizMzg5MDAzNzkwNA&actiongetalbum&album_id1566025152667107329) 一. 认识组件的嵌套 组件之间存在嵌套关系&#xff1a; 在之前的案例中&#xff0c;我们只是创建了一个组件App&…

爬虫案例 --唯品会口红数据爬取(附源码)

""" 项目名称: 唯品会商品数据爬取 项目描述: 通过requests框架获取网页数据 项目环境: pycharm && python3.8 作者所属: 几许一 . 抓包1. 对唯品会官网进行分析 -- 通过筛选直接搜索商品信息获得商品数据包https://mapi.vip.com/vips-mobile/rest/shop…

基于粒子群算法的参数拟合,寻优算法优化测试函数

目录 摘要 测试函数shubert 粒子群算法的原理 粒子群算法的主要参数 粒子群算法原理 粒子群算法参数拟合 代码 结果分析 展望 基于粒子群算法的参数拟合(代码完整,数据齐全)资源-CSDN文库 https://download.csdn.net/download/abc991835105/88698417 摘要 寻优算法,测试…

后端开发——JDBC的学习(三)

本篇继续对JDBC进行总结&#xff1a; ①通过Service层与Dao层实现转账的练习&#xff1b; ②重点&#xff1a;由于每次使用连接就手动创建连接&#xff0c;用完后就销毁&#xff0c;这样会导致资源浪费&#xff0c;因此引入连接池&#xff0c;练习连接池的使用&#xff1b; …

x-cmd pkg | tig - git 文本模式界面

目录 简介首次用户功能特点类似工具与竞品进一步探索 简介 tig 由 Jonas Fonseca 于 2006 年使用 C 语言创建的 git 交互式文本命令行工具。旨在开启交互模式快速浏览 git 存储库的信息以及 git 命令的运行。 首次用户 使用 x tig 即可自动下载并使用 在终端运行 eval "…

微服务之间互相调用出现的错误

场景&#xff1a; 微服务A调用微服务B的接口&#xff0c;微服务B的接口请求方式是get类型&#xff0c;传递的参数是JSON格式。 错误&#xff1a; 1、postman&#xff1a;springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserial…

Gin 框架介绍与快速入门

Gin 框架介绍与快速入门 文章目录 Gin 框架介绍与快速入门一、Gin框架介绍1. 快速和轻量级2. 路由和中间件3. JSON解析4. 支持插件5. Gin相关文档 二、基本使用1.安装2.导入3.第一个Gin 应用 三、应用举例四、Gin 入门核心1.gin.Engine2.gin.Context 一、Gin框架介绍 Gin是一个…

VitePress搭建Vite官方中文文档首页

✨专栏介绍 在当今数字化时代&#xff0c;Web应用程序已经成为了人们生活和工作中不可或缺的一部分。而要构建出令人印象深刻且功能强大的Web应用程序&#xff0c;就需要掌握一系列前端技术。前端技术涵盖了HTML、CSS和JavaScript等核心技术&#xff0c;以及各种框架、库和工具…