48 lines
1.4 KiB
C++
48 lines
1.4 KiB
C++
#pragma once
|
|
|
|
#include <chrono>
|
|
|
|
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::microseconds>(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<std::chrono::milliseconds>(curr_time - t_previousDelta).count();
|
|
else
|
|
ret = std::chrono::duration_cast<std::chrono::microseconds>(curr_time - t_previousDelta).count();
|
|
|
|
if (reset)
|
|
this->t_previousDelta = curr_time;
|
|
|
|
return ret;
|
|
}
|
|
|
|
private:
|
|
std::chrono::time_point<std::chrono::high_resolution_clock> t_start;
|
|
std::chrono::time_point<std::chrono::high_resolution_clock> t_previousDelta;
|
|
|
|
}; |