2023-04-08 00:56:20 +00:00
|
|
|
#pragma once
|
|
|
|
#include <chrono>
|
2023-05-02 01:50:55 +00:00
|
|
|
#include <sstream>
|
|
|
|
|
|
|
|
static std::string GetCurrentTimeStamp(int time_stamp_type )
|
|
|
|
{
|
|
|
|
std::chrono::system_clock::time_point now = std::chrono::system_clock::now();
|
|
|
|
|
|
|
|
std::time_t now_time_t = std::chrono::system_clock::to_time_t(now);
|
|
|
|
std::tm* now_tm = std::localtime(&now_time_t);
|
|
|
|
|
|
|
|
char buffer[128];
|
|
|
|
strftime(buffer, sizeof(buffer), "%F %T", now_tm);
|
|
|
|
|
|
|
|
std::ostringstream ss;
|
|
|
|
ss.fill('0');
|
|
|
|
|
|
|
|
std::chrono::milliseconds ms;
|
|
|
|
std::chrono::microseconds cs;
|
|
|
|
std::chrono::nanoseconds ns;
|
|
|
|
|
|
|
|
switch (time_stamp_type)
|
|
|
|
{
|
|
|
|
case 0:
|
|
|
|
ss << buffer;
|
|
|
|
break;
|
|
|
|
case 1:
|
|
|
|
ms = std::chrono::duration_cast<std::chrono::milliseconds>(now.time_since_epoch()) % 1000;
|
|
|
|
ss << buffer << ":" << ms.count();
|
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
ms = std::chrono::duration_cast<std::chrono::milliseconds>(now.time_since_epoch()) % 1000;
|
|
|
|
cs = std::chrono::duration_cast<std::chrono::microseconds>(now.time_since_epoch()) % 1000000;
|
|
|
|
ss << buffer << ":" << ms.count() << ":" << cs.count() % 1000;
|
|
|
|
break;
|
|
|
|
case 3:
|
|
|
|
ms = std::chrono::duration_cast<std::chrono::milliseconds>(now.time_since_epoch()) % 1000;
|
|
|
|
cs = std::chrono::duration_cast<std::chrono::microseconds>(now.time_since_epoch()) % 1000000;
|
|
|
|
ns = std::chrono::duration_cast<std::chrono::nanoseconds>(now.time_since_epoch()) % 1000000000;
|
|
|
|
ss << buffer << ":" << ms.count() << ":" << cs.count() % 1000 << ":" << ns.count() % 1000;
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
ss << buffer;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
return ss.str();
|
|
|
|
}
|
|
|
|
|
2023-04-08 00:56:20 +00:00
|
|
|
|
|
|
|
class StopWatch
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
StopWatch() {
|
|
|
|
_start = std::chrono::steady_clock::now();
|
|
|
|
}
|
|
|
|
|
|
|
|
void reset() {
|
|
|
|
_start = std::chrono::steady_clock::now();
|
|
|
|
}
|
|
|
|
|
|
|
|
double elapsed_s() {
|
|
|
|
return std::chrono::duration<double>(std::chrono::steady_clock::now() - _start).count();
|
|
|
|
}
|
|
|
|
|
|
|
|
double elapsed_ms() {
|
|
|
|
return std::chrono::duration<double, std::milli>(std::chrono::steady_clock::now() - _start).count();
|
|
|
|
}
|
|
|
|
|
|
|
|
double elapsed_us() {
|
|
|
|
return std::chrono::duration<double, std::micro>(std::chrono::steady_clock::now() - _start).count();
|
|
|
|
}
|
|
|
|
|
|
|
|
double elapsed_ns() {
|
|
|
|
return std::chrono::duration<double, std::nano>(std::chrono::steady_clock::now() - _start).count();
|
|
|
|
}
|
|
|
|
|
|
|
|
private:
|
|
|
|
std::chrono::steady_clock::time_point _start;
|
|
|
|
};
|
|
|
|
|