SFML - Simple and Fast Multimedia Library

SFML 3.0.2
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-2025 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
30#include <SFML/System/Export.hpp>
31
32#include <chrono>
33#include <ratio>
34#include <type_traits>
35
36#ifdef SFML_SYSTEM_ANDROID
37#include <SFML/System/SuspendAwareClock.hpp>
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
91 class SFML_SYSTEM_API Clock
92{
93public:
104 [[nodiscard]] Time getElapsedTime() const;
105
112 [[nodiscard]] bool isRunning() const;
113
120 void start();
121
128 void stop();
129
141 Time restart();
142
154 Time reset();
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
SuspendAwareClock.hpp
Export.hpp
SFML_SYSTEM_API
#define SFML_SYSTEM_API
Definition System/Export.hpp:42
sf::Clock
Utility class that measures the elapsed time.
Definition Clock.hpp:92
sf::Clock::restart
Time restart()
Restart the clock.
sf::Clock::reset
Time reset()
Reset the clock.
sf::Clock::isRunning
bool isRunning() const
Check whether the clock is running.
sf::Clock::start
void start()
Start the clock.
sf::Clock::getElapsedTime
Time getElapsedTime() const
Get the elapsed time.
sf::Clock::stop
void stop()
Stop the clock.
sf::Time
Represents a time value.
Definition Time.hpp:42
sf
Definition AudioResource.hpp:36