C++ 时间处理-统计函数运行时间

  • [1. 关键词](#1. 关键词)
  • [2. 问题](#2. 问题)
  • [3. 解决思路](#3. 解决思路)
  • [4. 代码实现](#4. 代码实现)
    • [4.1. timecount.h](#4.1. timecount.h)
    • [4.2. timecount.cpp](#4.2. timecount.cpp)
  • [5. 测试代码](#5. 测试代码)
  • [6. 运行结果](#6. 运行结果)
  • [7. 源码地址](#7. 源码地址)

1. 关键词

C++ 时间处理 统计函数运行时间 跨平台

2. 问题

C++如何简单便捷地实现"函数运行时间的统计"功能?

3. 解决思路

  • 类的构造函数:会在对象初始化的时候被调用。
  • 类的析构函数:会在对象销毁的时候被调用。
  • 局部对象的生命周期:对象实例化(也就是初始化)时开始,退出作用域时结束。

4. 代码实现

4.1. timecount.h

cpp 复制代码
#pragma once

#include <cstdint>
#include <atomic>
#include <string>

namespace cutl
{
    /**
     * @brief A simple time counter class to measure the execution time of a function.
     *
     */
    class timecount
    {
    public:
        /**
         * @brief Construct a new timecount object
         * The constructor will record the begin time of the function calling.
         * @param func_name
         */
        timecount(const std::string &func_name);
        /**
         * @brief Destroy the timecount object
         * The desctructor will record the end time of the function calling and calculate the execution time.
         */
        ~timecount();

    private:
        std::string func_name_;
        std::atomic<uint64_t> start_time_;
    };

} // namespace

4.2. timecount.cpp

cpp 复制代码
#include "timecount.h"
#include "timeutil.h"
#include "strfmt.h"
#include "inner/logger.h"

namespace cutl
{
    timecount::timecount(const std::string &func_name)
        : func_name_(func_name)
    {
        start_time_ = clocktime(timeunit::us);
    }

    timecount::~timecount()
    {
        auto end_time = clocktime(timeunit::us);
        auto duration = end_time - start_time_;
        auto text = "[timecount] " + func_name_ + " used " + fmt_timeduration_us(duration);
        CUTL_LOGGER.info("", text);
    }
} // namespace

5. 测试代码

cpp 复制代码
#pragma once

#include <iostream>
#include "timecount.h"
#include "common.hpp"

void TestTimecount()
{
    PrintTitle("timecount");

    cutl::timecount tcount("TestTimecount");
    std::cout << "TestTimecount begin" << std::endl;
    std::this_thread::sleep_for(std::chrono::seconds(1));
    std::cout << "TestTimecount end" << std::endl;
}

6. 运行结果

bash 复制代码
=============================================timecount==============================================
TestTimecount begin
TestTimecount end
[2024-05-19 22:34:35.853][I]]0x7ff844a9b100](cutl)  [timecount] TestTimecount used 01s.004955us

7. 源码地址

更多详细代码,请查看本人写的C++ 通用工具库: common_util, 本项目已开源,代码简洁,且有详细的文档和Demo。

相关推荐
liulilittle4 分钟前
深度剖析:OPENPPP2 libtcpip 实现原理与架构设计
开发语言·网络·c++·tcp/ip·智能路由器·tcp·通信
十年编程老舅1 小时前
跨越十年的C++演进:C++20新特性全解析
c++·c++11·c++20·c++14·c++23·c++17·c++新特性
小刘同学3212 小时前
C++11 特性
c++·c11新特性
真的想上岸啊3 小时前
学习C++、QT---18(C++ 记事本项目的stylesheet)
开发语言·c++·学习
m0_552200823 小时前
《UE5_C++多人TPS完整教程》学习笔记40 ——《P41 装备(武器)姿势(Equipped Pose)》
c++·游戏·ue5
丁劲犇3 小时前
用 Turbo Vision 2 为 Qt 6 控制台应用创建 TUI 字符 MainFrame
开发语言·c++·qt·tui·字符界面·curse
charlie1145141914 小时前
深入理解Qt的SetWindowsFlags函数
开发语言·c++·qt·原理分析
呜喵王阿尔萨斯4 小时前
编程中的英语
c语言·c++
whoarethenext5 小时前
使用 C++/Faiss 加速海量 MFCC 特征的相似性搜索
开发语言·c++·faiss