microseconds, us
std::chrono::microseconds has_tag_delete_time = std::chrono::microseconds::zero();
auto d_t0 = std::chrono::steady_clock::now();
// do something
auto d_t1 = std::chrono::steady_clock::now();
has_tag_delete_time += std::chrono::duration_cast<std::chrono::microseconds>(d_t1-d_t0);
long long t = has_tag_delete_time.count();
tools.h
#include <chrono>
#define TIME_MEASURE_SZ 5
template <typename UnitType> // std::chrono::nanoseconds, microseconds, milliseconds, seconds ...
class TimeMeasure
{
std::chrono::_V2::system_clock::time_point start;
int idx;
public:
static int64_t time_measure[TIME_MEASURE_SZ];
static const char *unit_str;
TimeMeasure(int idx) : start(std::chrono::system_clock::now()), idx(idx) {}
~TimeMeasure()
{
auto end = std::chrono::system_clock::now();
UnitType duration = std::chrono::duration_cast<UnitType>(end - start); // see here
time_measure[idx] += duration.count();
}
};
main.cpp
#include "tools.h"
template <typename UnitType>
int64_t TimeMeasure<UnitType>::time_measure[TIME_MEASURE_SZ];
template <typename UnitType>
const char *TimeMeasure<UnitType>::unit_str = "us";
#define TIME_UNIT std::chrono::microseconds
int main()
{
TimeMeasure<TIME_UNIT>::time_measure[0]=0;
{
TimeMeasure<TIME_UNIT> ins(0);
// do something, measure time take up with unit microseconds
}
std::cout<<TimeMeasure<TIME_UNIT>::time_measure[0]<<TimeMeasure<TIME_UNIT>::unit_str<<std::endl;
return 0;
}