12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- #pragma once
- #include "../C/Baselib_CountdownTimer.h"
- #include "Time.h"
- namespace baselib
- {
- BASELIB_CPP_INTERFACE
- {
- class CountdownTimer
- {
- public:
- //
- // Create a countdown timer that already expired.
- //
- // Guaranteed to not sample the system timer.
- //
- static CountdownTimer InitializeExpired()
- {
- return CountdownTimer();
- }
- //
- // Create and start a countdown timer.
- //
- static CountdownTimer StartNew(const high_precision_clock::duration timeout)
- {
- return CountdownTimer(timeout);
- }
- //
- // Get time left before timeout expires.
- //
- // This function is guaranteed to return zero once timeout expired.
- // It is also guaranteed that this function will not return zero until timeout expires.
- // Return the time left as a high precision duration.
- //
- high_precision_clock::duration GetTimeLeft() const
- {
- return high_precision_clock::duration_from_ticks(Baselib_CountdownTimer_GetTimeLeftInTicks(m_CountdownTimer));
- }
- //
- // Get time left before timeout expires.
- //
- // This function is guaranteed to return zero once timeout expired.
- // It is also guaranteed that this function will not return zero until timeout expires.
- // Return the time left as a millisecond integer duration.
- //
- timeout_ms GetTimeLeftInMilliseconds() const
- {
- return timeout_ms(Baselib_CountdownTimer_GetTimeLeftInMilliseconds(m_CountdownTimer));
- }
- //
- // Check if timout has been reached.
- //
- bool TimeoutExpired() const
- {
- return Baselib_CountdownTimer_TimeoutExpired(m_CountdownTimer);
- }
- private:
- CountdownTimer() : m_CountdownTimer{0, 0} {}
- CountdownTimer(const high_precision_clock::duration timeout) : m_CountdownTimer(Baselib_CountdownTimer_StartTicks(high_precision_clock::ticks_from_duration_roundup(timeout))) {}
- Baselib_CountdownTimer m_CountdownTimer;
- };
- }
- }
|