C++实现获取时间戳和计算运行时长

 更新时间:2024年12月16日 08:44:13   作者:訫悦  
这篇文章主要为大家详细介绍了如何使用C++实现获取时间戳和计算运行时长功能,文中的示例代码讲解详细,有需要的小伙伴可以参考一下

一、便于使用,使用chrono封装一个简单的类

#pragma once
 
#include <chrono>
 
using CTime_point = std::chrono::high_resolution_clock::time_point;
 
class CElapsedTime final
{
public:
    static CTime_point now() {
        return std::chrono::high_resolution_clock::now();
    }
 
    using s  = std::chrono::seconds;
    using ms = std::chrono::milliseconds;
    using us = std::chrono::microseconds;
    using ns = std::chrono::nanoseconds;
 
    //获取当前时间戳 类型: s/ms/us/ns
    template<typename T = CElapsedTime::ms> static long long since_epoch() {
        const auto now = std::chrono::system_clock::now();//时间戳要用 system_clock
        const auto sinceEpoch = std::chrono::duration_cast<T>(now.time_since_epoch());
        return sinceEpoch.count();
    }
 
    //计算时间差  类型: s/ms/us/ns
    template<typename T = CElapsedTime::ms>
    static long long duration(const CTime_point &begin, const CTime_point &end)
    {
        const auto delta = std::chrono::duration_cast<T>(end - begin);
        return delta.count();
    }
 
    const static long long _s  = 1;
    const static long long _ms = 1000;
    const static long long _us = 1000000;
    const static long long _ns = 1000000000;
    //计算时间差  返回浮点类型
    template<size_t T = CElapsedTime::_ms>
    static double duration(const CTime_point &begin, const CTime_point &end)
    {
        const std::chrono::duration<double, std::ratio<1, T>> delta = end - begin;
        return delta.count();
    }
};

二、直接调用

#include <stdlib.h>
#include <thread>
#include <iostream>
#include <iomanip>
#include "CElapsedTime.h"
 
int main(int argc, char *argv[])
{
#ifdef _WIN32
   _tzset();
   _putenv("_tz=GMT +8");
#else
    setenv("TZ", "Asia/Shanghai", 1);
#endif
 
    auto begin = CElapsedTime::now();
    std::this_thread::sleep_for(std::chrono::milliseconds(1230));//运行时长
    auto end = CElapsedTime::now();
 
    long long sinceEpoch = CElapsedTime::since_epoch();
    std::cout << "since epoch: " << sinceEpoch  << std::endl;
 
    std::cout << "run(s):  " << CElapsedTime::duration<CElapsedTime::s>(begin, end)  << std::endl;
    std::cout << "run(ms): " << CElapsedTime::duration<CElapsedTime::ms>(begin, end) << std::endl;
    std::cout << "run(us): " << CElapsedTime::duration<CElapsedTime::us>(begin, end) << std::endl;
    std::cout << "run(ns): " << CElapsedTime::duration<CElapsedTime::ns>(begin, end) << std::endl;
 
    std::cout << "run(s):  " << std::fixed << std::setprecision(3) << CElapsedTime::duration<CElapsedTime::_s>(begin, end)  << std::endl;
    std::cout << "run(ms): " << std::fixed << std::setprecision(3) << CElapsedTime::duration<CElapsedTime::_ms>(begin, end) << std::endl;
    std::cout << "run(us): " << std::fixed << std::setprecision(3) << CElapsedTime::duration<CElapsedTime::_us>(begin, end) << std::endl;
    std::cout << "run(ns): " << std::fixed << std::setprecision(3) << CElapsedTime::duration<CElapsedTime::_ns>(begin, end) << std::endl;
 
    return 0;
}

运行结果:

到此这篇关于C++实现获取时间戳和计算运行时长的文章就介绍到这了,更多相关C++获取时间戳内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 深入ORACLE变量的定义与使用的详解

    深入ORACLE变量的定义与使用的详解

    本篇文章是对ORACLE变量的定义与使用进行了详细的分析与介绍,需要的朋友参考下
    2013-05-05
  • C语言植物大战数据结构二叉树堆

    C语言植物大战数据结构二叉树堆

    这篇文章主要为大家介绍了C语言植物大战数据结构二叉树堆的图文示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • 一文掌握C语言中的柔性数组

    一文掌握C语言中的柔性数组

    柔性数组在C语言的 C99 标准中,引入的新特性,结构中的最后一个元素的大小允许是未知的数组,即为柔性数组,本文给大家介绍c语言中的柔性数组,感兴趣的朋友跟随小编一起看看吧
    2024-03-03
  • C++ 静态成员的类内初始化详解及实例代码

    C++ 静态成员的类内初始化详解及实例代码

    这篇文章主要介绍了C++ 静态成员的类内初始化详解及实例代码的相关资料,需要的朋友可以参考下
    2017-02-02
  • C语言实现双向链表

    C语言实现双向链表

    本文给大家分享的是一段使用C语言实现双向链表的代码,完全是根据自己的理解和认识来编写的,希望大家能够喜欢,文章的最后附上了一个网友写的对于双向链表删除节点、插入节点、双向输出等操作的代码,也非常不错,推荐给大家
    2015-03-03
  • 数据结构之数组翻转的实现方法

    数据结构之数组翻转的实现方法

    这篇文章主要介绍了数据结构之数组翻转的实现方法的相关资料,这里用几种实现方法来实现这样的功能,需要的朋友可以参考下
    2017-10-10
  • 数据结构之堆的具体使用

    数据结构之堆的具体使用

    本文主要介绍了数据结构之堆的具体使用,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • C++ 输入scanf()和输出printf()的操作

    C++ 输入scanf()和输出printf()的操作

    这篇文章主要介绍了C++ 输入scanf()和输出printf()的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • C++编程中使用设计模式中的policy策略模式的实例讲解

    C++编程中使用设计模式中的policy策略模式的实例讲解

    这篇文章主要介绍了C++编程中使用设计模式中的policy策略模式的实例讲解,文章最后对策略模式的优缺点有一个简单的总结,需要的朋友可以参考下
    2016-03-03
  • MFC创建模态对话框和非模态对话框的方法

    MFC创建模态对话框和非模态对话框的方法

    这篇文章主要介绍了MFC创建模态对话框和非模态对话框的方法,需要的朋友可以参考下
    2014-07-07

最新评论