| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- #include <chrono>
- #include "Util.h"
- #include "Timer.h"
- namespace PresenceDetection {
- namespace Util {
- Timer::Timer() :
- m_run(false),
- m_aborted(false),
- m_identifier(CreateRandomString(10))
- {
- }
- Timer::~Timer()
- {
- Abort();
- Wait();
- }
- bool Timer::operator==(const Timer& other) const
- {
- return m_identifier == other.Identifier();
- }
- std::string Timer::Identifier() const
- {
- return m_identifier;
- }
- void Timer::Stop()
- {
- m_run.store(false, std::memory_order_release);
- }
- void Timer::Abort()
- {
- m_run.store(false, std::memory_order_release);
- {
- std::unique_lock<std::mutex> lock(m_mutex);
- m_aborted = true;
- }
- m_conditionVariable.notify_all();
- }
- bool Timer::IsRunning() const noexcept
- {
- return (m_run.load(std::memory_order_acquire) && m_thread.joinable());
- }
- void Timer::Wait()
- {
- if (m_thread.joinable())
- m_thread.join();
- }
- } // namespace Util
- } // namespace PresenceDetection
|