std c++ 获取运行时间封装

Posted qianbo_insist

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了std c++ 获取运行时间封装相关的知识,希望对你有一定的参考价值。

c++11 的时间

名空间在std::chrono 里卖弄
using namespace std::chrono

1 使用std::chrono::system_clock

#include <chrono>
#include <string>
#include <iomanip>
#include <ctime>
#include <sstream>
using namespace std::chrono;

#if 1
class c_time {
public:
	c_time() {}
	~c_time() {}
	inline void Start() { this->start = std::chrono::system_clock::now(); }
	inline void End() { this->end = std::chrono::system_clock::now(); }

	inline int64_t GetRunTime() {
		auto us_duration = std::chrono::duration_cast<std::chrono::microseconds>(this->end - this->start);
		//auto ms_duration = std::chrono::duration_cast<std::chrono::milliseconds>(this->end - this->start);
		uint64_t ms = us_duration.count();
		return ms;
	}

	std::string Now() {
		auto now = std::chrono::system_clock::now();
		auto m = now.time_since_epoch();
		//auto diff = std::chrono::duration_cast<std::chrono::microseconds>(m).count(); //当前时间显示到微秒
		//auto const ms = diff % 1000000;
		auto diff = std::chrono::duration_cast<std::chrono::milliseconds>(m).count(); //当前时间显示到毫秒
		auto const ms = diff % 1000;

		std::stringstream ss;
		std::time_t t = std::chrono::system_clock::to_time_t(now);
		ss << std::put_time(std::localtime(&t), "%Y-%m-%d %H.%M.%S") << "." << ms;
		return ss.str();
	}
private:
	std::chrono::system_clock::time_point start;
	std::chrono::system_clock::time_point end;
};

2 使用high_resolution_clock

class c_time2
{
private:
    time_point<high_resolution_clock> v_begin;
public:
    c_time2()
    {
        update();
    }
    ~c_time2()
    {}

    void  update()
    {
        v_begin = high_resolution_clock::now();
    }
    double get_s()
    {
        return  get_us() * 0.000001;
    }
    double get_ms()
    {
        return this->get_us() * 0.001;
    }
    uint64_t get_us()
    {
        return duration_cast<microseconds>(high_resolution_clock::now() - v_begin).count();
    }
};

//分别是得到秒,毫秒,微妙
#endif

使用

  c_time2 t;
  ... 其他 耗时 模拟
  std::cout << ff1.get() << std::endl;
  std::cout << ff2.get() << std::endl;
  std::cout << ff3.get() << std::endl;
  ... 
  //得到微妙
  std::cout << t.get_us()<<" us" << std::endl;

以上是关于std c++ 获取运行时间封装的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C++ 中获取一段代码的执行时间?

C++ 运行时终止 std::out_of_range [关闭]

如何从 C++ 中的 std::chrono::year_month_day 获取工作日编号

C++ 字符串 - 如何避免获取无效指针?

使用 std::thread 的 C++ 多线程应用程序在 Windows 上运行良好,但在 Ubuntu 上运行良好

C# Task.Run() 与 C++ std::async()