Loading...
Searching...
No Matches
Clock.hpp
Go to the documentation of this file.
1
2//
3// SFML - Simple and Fast Multimedia Library
4// Copyright (C) 2007-2024 Laurent Gomila (laurent@sfml-dev.org)
5//
6// This software is provided 'as-is', without any express or implied warranty.
7// In no event will the authors be held liable for any damages arising from the use of this software.
8//
9// Permission is granted to anyone to use this software for any purpose,
10// including commercial applications, and to alter it and redistribute it freely,
11// subject to the following restrictions:
12//
13// 1. The origin of this software must not be misrepresented;
14// you must not claim that you wrote the original software.
15// If you use this software in a product, an acknowledgment
16// in the product documentation would be appreciated but is not required.
17//
18// 2. Altered source versions must be plainly marked as such,
19// and must not be misrepresented as being the original software.
20//
21// 3. This notice may not be removed or altered from any source distribution.
22//
24
25#pragma once
26
28// Headers
31
32#include <chrono>
33#include <ratio>
34#include <type_traits>
35
36#ifdef SFML_SYSTEM_ANDROID
38#endif
39
40
41namespace sf
42{
43namespace priv
44{
45
71#if defined(SFML_SYSTEM_ANDROID) && defined(SFML_ANDROID_USE_SUSPEND_AWARE_CLOCK)
72using ClockImpl = SuspendAwareClock;
73#else
74using ClockImpl = std::conditional_t<std::chrono::high_resolution_clock::is_steady, std::chrono::high_resolution_clock, std::chrono::steady_clock>;
75#endif
76
77static_assert(ClockImpl::is_steady, "Provided implementation is not a monotonic clock");
78static_assert(std::ratio_less_equal_v<ClockImpl::period, std::micro>,
79 "Clock resolution is too low. Expecting at least a microsecond precision");
80
81} // namespace priv
82
83class Time;
84
92{
93public:
104 [[nodiscard]] Time getElapsedTime() const;
105
112 [[nodiscard]] bool isRunning() const;
113
120 void start();
121
128 void stop();
129
142
155
156private:
158 // Member data
160 priv::ClockImpl::time_point m_refPoint{priv::ClockImpl::now()};
161 priv::ClockImpl::time_point m_stopPoint;
162};
163
164} // namespace sf
165
166
#define SFML_SYSTEM_API
Utility class that measures the elapsed time.
Definition Clock.hpp:92
Time restart()
Restart the clock.
Time reset()
Reset the clock.
bool isRunning() const
Check whether the clock is running.
void start()
Start the clock.
Time getElapsedTime() const
Get the elapsed time.
void stop()
Stop the clock.
Represents a time value.
Definition Time.hpp:42