synapse-app-sdk
C++ SDK for Synapse Apps
Loading...
Searching...
No Matches
time.hpp
1#pragma once
2#include <chrono>
3namespace synapse {
4
11template <typename Resolution = std::chrono::nanoseconds>
12auto get_steady_clock_now() {
13 return std::chrono::duration_cast<Resolution>(
14 std::chrono::steady_clock::now().time_since_epoch());
15}
16
23template <typename Resolution = std::chrono::nanoseconds>
24auto get_system_clock_now() {
25 return std::chrono::duration_cast<Resolution>(
26 std::chrono::system_clock::now().time_since_epoch());
27}
28
34class Timer {
35 public:
40 explicit Timer(double interval_seconds)
41 : interval_ns_(static_cast<int64_t>(interval_seconds * 1e9)),
42 last_time_(std::chrono::steady_clock::now()) {}
43
48 bool has_elapsed() const {
49 const auto now = std::chrono::steady_clock::now();
50 const auto elapsed_ns =
51 std::chrono::duration_cast<std::chrono::nanoseconds>(now - last_time_).count();
52 return elapsed_ns >= interval_ns_;
53 }
54
59 double elapsed_seconds() const {
60 const auto now = std::chrono::steady_clock::now();
61 return std::chrono::duration_cast<std::chrono::duration<double>>(now - last_time_).count();
62 }
63
67 void reset() { last_time_ = std::chrono::steady_clock::now(); }
68
74 if (has_elapsed()) {
75 reset();
76 return true;
77 }
78 return false;
79 }
80
81 private:
83 int64_t interval_ns_;
84
86 std::chrono::time_point<std::chrono::steady_clock> last_time_;
87};
88
89} // namespace synapse
Timer(double interval_seconds)
Constructor for Timer.
Definition time.hpp:40
double elapsed_seconds() const
Get elapsed time in seconds.
Definition time.hpp:59
void reset()
Reset the timer to current time.
Definition time.hpp:67
bool reset_if_elapsed()
Reset timer if interval has elapsed.
Definition time.hpp:73
bool has_elapsed() const
Check if the specified interval has elapsed.
Definition time.hpp:48