OSSIA
Open Scenario System for Interactive Application
Loading...
Searching...
No Matches
clock.hpp
1#pragma once
2
3#include <ossia/detail/config.hpp>
4#include <ossia/detail/thread.hpp>
5
7
8#include <atomic>
9#include <chrono>
10#include <functional>
11#include <memory>
12#include <thread>
13
14namespace ossia
15{
16class state;
17class time_interval;
18using clock_type = std::chrono::steady_clock;
19class OSSIA_EXPORT clock
20{
21 friend class time_interval;
22
23public:
24 enum exec_status
25 {
26 RUNNING,
27 STOPPED
28 };
29 using exec_status_callback = std::function<void(exec_status)>;
30
32 clock(ossia::time_interval& cst, double time_ratio = 1000.);
33
35 ~clock();
36
38 void start_and_tick();
39
41 void stop();
42
44 void pause();
45
47 [[nodiscard]] bool paused() const;
48
50 void resume();
51
56 bool tick();
57
60 [[nodiscard]] time_value get_duration() const;
61
65 clock& set_duration(ossia::time_value);
66
69 [[nodiscard]] time_value get_granularity() const;
70
74 clock& set_granularity(std::chrono::microseconds);
75 clock& set_granularity(std::chrono::milliseconds);
76
79 [[nodiscard]] bool running() const;
80
83 [[nodiscard]] time_value get_position() const;
84
87 [[nodiscard]] time_value get_date() const;
88
89 // Execution status will be called when the clock starts and stops.
90 void set_exec_status_callback(exec_status_callback);
91 [[nodiscard]] exec_status_callback get_exec_status_callback() const;
92
93private:
95 void do_set_duration(ossia::time_value);
96
99 void request_stop();
100
101 time_interval& m_interval;
102
103 double m_ratio{};
104
105 time_value m_duration{};
106
108 time_value m_granularity{};
109
112 time_value m_date{};
113
114 ossia::thread m_thread;
115
117 clock_type::time_point m_lastTime{};
118
119 exec_status_callback m_statusCallback;
120
122 int64_t m_elapsedTime{};
123
124 std::atomic_bool m_running{};
125 std::atomic_bool m_paused{};
126 std::atomic_bool m_shouldStop{};
127
129 void thread_callback();
130};
131}
The state class.
Definition editor/state/state.hpp:25
The time_interval class.
Definition time_interval.hpp:49
Definition git_info.h:7