#pragma once #include class SysTimer final { public: SysTimer() noexcept { auto curr_time = std::chrono::high_resolution_clock::now(); t_start = curr_time; t_previousDelta = curr_time; } ~SysTimer() {} void Reset() { this->t_previousDelta = std::chrono::high_resolution_clock::now(); } const double GetElapsedTime() const { return (double)(std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - t_start).count()); } const double GetElapsedTimeS() const { return GetElapsedTime() / 1000000; } const double GetDeltaTime() { return GetDeltaTime(false, true); } const double GetDeltaTimeUs() { return GetDeltaTime(false, false); } const double GetDeltaTime(bool reset, bool msMode) { auto curr_time = std::chrono::high_resolution_clock::now(); double ret = 0; if (msMode) ret = std::chrono::duration_cast(curr_time - t_previousDelta).count(); else ret = std::chrono::duration_cast(curr_time - t_previousDelta).count(); if (reset) this->t_previousDelta = curr_time; return ret; } private: std::chrono::time_point t_start; std::chrono::time_point t_previousDelta; };