首页 > 编程语言 >定义一个C++的类,析构的时候输出当前函数执行耗时

定义一个C++的类,析构的时候输出当前函数执行耗时

时间:2024-08-06 10:51:36浏览次数:7  
标签:std 函数 chrono C++ 耗时 析构 ElapseMillsec 定义

背景介绍:
有时候我们需要知道一个函数的执行耗时。

按照传统方法,至少要定义一个 start, end, 然后计算差值,输出差值,4个步骤。

这里,我们定义一个  ElapseMillsec 类,然后在类的生命周期结束的时候,在析构函数里面 计算出差值。

此时   ElapseMillsec 类 的生命周期,就是函数执行耗时时间。

 

使用方法:

  使用的时候,我们只需要在需要计算执行耗时的函数的最开头,定义一个 

   ElapseMillsec oneCost("test_add");  

类似这样的对象即可。 参数是我们需要添加的个性化注释内容。

 

#include <iostream>  
#include <chrono>  
#include <iomanip> // 用于设置输出流的格式  
using namespace std;

class ElapseMillsec{
public:

ElapseMillsec(std::string comment):m_comment(comment){
  m_Start = std::chrono::high_resolution_clock::now(); // 获取开始时间  
}

ElapseMillsec(){
  m_Start = std::chrono::high_resolution_clock::now(); // 获取开始时间  
}

~ElapseMillsec(){
  m_End = std::chrono::high_resolution_clock::now(); // 获取结束时间  
  // 计算持续时间  
  std::chrono::duration<double, std::milli> elapsed = m_End - m_Start;  
  // 输出执行时间,以毫秒为单位  
  std::cout << m_comment <<" cost " << elapsed.count() << " milliseconds." << std::endl;  
}

private:
std::string m_comment="";
std::chrono::high_resolution_clock::time_point m_Start;
std::chrono::high_resolution_clock::time_point m_End;
};

int main(){
  long long sum = 0; // 用于累加,但结果并不重要  
  ElapseMillsec oneCost("test_add");
  // 从1加到100万  
  for (int i = 1; i <= 1000000; ++i) {  
      sum += i; // 自加操作  
  }  
  std::cout<<"Hello emsdk!"<<std::endl;
  return 0;
}


// step1: 编译C++工程
// emcc ./input/hello1.cpp -o ./output/hello1/hello1.html

// step2: 运行web
// emrun --no_browser  --port 8081  ./output/hello1/

// step3: 浏览器查看
// localhost:8081/hello1.html




  
   

 

标签:std,函数,chrono,C++,耗时,析构,ElapseMillsec,定义
From: https://www.cnblogs.com/music-liang/p/18344701

相关文章

  • C++(虚函数实现多态基本原理)
    目录1.概念2.示例3.总结在C++中,加上virtual关键字可以实现多态,这是因为它允许函数在基类和派生类中有不同的实现,并确保在运行时正确调用派生类的方法。具体来说,这种机制称为“动态绑定”或“运行时多态”。1.概念虚函数(VirtualFunction):当你在基类中声明一个函数......
  • C++11革新之旅:探索C++编程的无限可能
    C++11革新之旅:探索C++编程的无限可能C++11,作为C++语言的一个重要标准,为C++编程带来了革命性的变革。它不仅引入了众多新特性和改进,还极大地增强了C++的表达能力、提高了程序的性能和资源利用率。本文将从多个方面深入探讨C++11的新特性,并解析这些特性如何改变C++编程的方式......
  • windows C++-使用 C++/WinRT 创作 API(一)
    这个系列中的"投影”不太好有准确的翻译,它的原文是"projection",最开始我觉得可能翻译为实现,但C++本身也有"实现(implementation )",这两个不同的词翻译为一个总觉得怪怪的。本文展示了如何直接或间接使用winrt::implements基本结构来拓展创作C++/WinRTAPI。在此上......
  • windows C++-使用 C++/WinRT 创作 API(二)
    可扩展应用程序标记语言(XAML)是一种声明性语言。具体来讲,XAML可初始化对象和设置对象的属性,使用一种可显示多个对象间分层关系的语言结构,还使用了一种支持类型扩展的支持类型约定。可以在声明性XAML标记中创建可见的UI元素。然后,可以为每个XAML文件关联单独的代码隐藏......
  • C++ 拷贝构造函数语义与移动构造函数语义
    拷贝构造函数语义与移动构造函数语义一、拷贝构造函数语义1.编译器生成拷贝构造函数的条件2.自定义拷贝构造函数3.深拷贝与浅拷贝4.拷贝构造函数的使用场景5.拷贝赋值运算符6.规则五(RuleofFive)二、移动构造函数语义1.禁止生成移动构造函数2.生成移动构造函数......
  • Codeforces Round 963 (Div. 2) A - C 详细题解(思路加代码,C++,Python) -- 来自灰名
    比赛链接:Dashboard-CodeforcesRound963(Div.2)-Codeforces之后有实力了再试试后面的题目,现在要做那些题,起码要理解一个多小时题目A:链接:Problem-A-Codeforces题目大意理解:        极少数不考翻译能读懂的cf题目(bushi)每个测试用例第一行一个n,......
  • C++_Const的相关知识点
    1.修饰函数参数,表示函数不会修改参数当const修饰函数参数时,表示函数内部不会修改该参数的值。这样做可以使代码更加安全,避免在函数内部无意中修改传入的参数值。尤其是引用作为参数时,如果确定不会修改引用,那么一定要使用const引用。voidfunc(constinta){......
  • C++ exe程序内存占用分析
    编译 $gitclonehttps://github.com/google/bloaty$cdbloaty$cmake-Bbuild-GNinja-S.$cmake--buildbuild$cmake--buildbuild--targetinstall命令bloaty.exe --list-sourcesrmembersthe.ofilesina.afilecompileunitssourcefile......
  • 【C++ 面试 - 基础题】每日 3 题(一)
    ✍个人博客:Pandaconda-CSDN博客......
  • 【C++】实验十三
    题目:1、声明Point(点)类,由Point类派生出Circle(圆)类,再由Circle类派生出Cylinder(圆柱)类。将类的定义部分分别作为3个头文件。对它们的成员函数的声明部分分别作为3个源文件(.cpp文件),在主函数中用#include命令把它们包含进来。形成一个完整的程序,并上机运行。2、教材第12章例12.3的......