• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

c++时间计算模块

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

可用于计算代码运行耗时、计算代码运行时间线(比如处理与运行时间相关函数)。

该模块从实际项目中产生,使用方式仁者见仁智者见智,设计思想可供参考。

源码:

//author: cai bingcheng, 2018

#pragma once

#include <iostream>
#include <chrono>

class GetCostTime
{
private:
    std::chrono::steady_clock::time_point m_time_pre;
    std::chrono::steady_clock::time_point m_time_now;
    std::chrono::steady_clock::time_point m_time_line;
    std::chrono::duration<double> m_time_cost;
    std::chrono::steady_clock::time_point m_time_run_begin;
    std::chrono::steady_clock::time_point m_time_run_end;
    std::chrono::duration<double> m_time_run_cost;
public:

    GetCostTime();
    ~GetCostTime();
    //init
    void GetCostTimeInit();
    //calculate cost time after init, refreshing after using
    double CalCostTime();
    //calculate cost time without refreshing
    double CalTimeLine();
    //init
    void RunTime();
    //calculate cost time after init without refreshing
    double GetRunTime();
    //sleep for m ms
    bool WaitTimeMs(double ms);
};

namespace tim{
    extern GetCostTime run_time;
}

//author: cai bingcheng, 2018

#include "GetCostTime.h"

using namespace std;

GetCostTime::GetCostTime()
{

}

GetCostTime::~GetCostTime()
{
  // std::cout << "-- GetCostTime Destructor successfully!" << std::endl;
}

void GetCostTime::GetCostTimeInit()
{
  m_time_now = std::chrono::steady_clock::now();
}

double GetCostTime::CalCostTime()
{
  m_time_pre = m_time_now;
  m_time_now = std::chrono::steady_clock::now();
  m_time_cost = std::chrono::duration_cast<chrono::duration<double>>(m_time_now - m_time_pre);
  return m_time_cost.count();
}

double GetCostTime::CalTimeLine()
{
  m_time_line = std::chrono::steady_clock::now();
  m_time_cost = std::chrono::duration_cast<chrono::duration<double>>(m_time_line - m_time_now);
  return m_time_cost.count();
}

void GetCostTime::RunTime()
{
  m_time_run_begin = std::chrono::steady_clock::now();
}

double GetCostTime::GetRunTime()
{
  m_time_run_end = std::chrono::steady_clock::now();
  m_time_run_cost = std::chrono::duration_cast<chrono::duration<double>>(m_time_run_end - m_time_run_begin);
  return m_time_run_cost.count();
}

//do not init while use this function
bool GetCostTime::WaitTimeMs(double ms)
{
  GetCostTimeInit();
  while(CalTimeLine() * 1000 < ms);
  return true;
}

namespace tim{
  GetCostTime run_time;
}

例程:

//CalCostTime
GetCostTime time;    
//init
time.GetCostTimeInit();
yourFunctions_1();
double cost_time = time.CalCostTime();
yourFunctions_2();
double cost_time = time.CalCostTime();
//GetRunTime
GetCostTime time;
time.RunTime();
yourFunctions();
double cost_time = time.GetRunTime();

上述两种方式有略微不同。

CalCostTime只需初始化一次,调用之后内部自动开始计时,适用于计算相邻代码块时间。

GetRunTime每次使用之前都需要初始化,适用于计算不相邻代码块时间。

//CalTimeLine
GetCostTime time;
time.GetCostTimeInit();
yourFunctions();
double cost_time = time.CalTimeLine();
if(cost_time > time_threshold)
    yourTasks();

CalTimeLine用于计算时间线,如果需要实现的功能与已运行时间有关,则可以使用该部分。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#委托简介发布时间:2022-07-13
下一篇:
【C#】XSLT转换XML实例(轉)发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap