Files
PresenceDetection/Util/Timer.cpp
T
2019-04-15 11:17:36 +02:00

73 lines
1.2 KiB
C++

#include <chrono>
#include "Util.h"
#include "Timer.h"
namespace PresenceDetection {
namespace Util {
Timer::Timer() :
m_run(false),
m_identifier(CreateRandomString(10))
{
}
Timer::~Timer()
{
Wait();
}
Timer::Timer(Timer&& other) :
m_run(static_cast<bool>(other.m_run)),
m_identifier(other.m_identifier),
m_thread(std::move(other.m_thread))
{
}
Timer& Timer::operator=(Timer&& other)
{
m_run = static_cast<bool>(other.m_run);
m_identifier = std::move(other.m_identifier);
m_thread = std::move(other.m_thread);
return *this;
}
bool Timer::operator==(const Timer& other) const
{
return m_identifier == other.Identifier();
}
bool Timer::operator==(const std::string& identifier) const
{
return m_identifier == identifier;
}
bool Timer::operator==(bool running) const
{
return IsRunning() == running;
}
std::string Timer::Identifier() const
{
return m_identifier;
}
void Timer::Stop()
{
m_run.store(false, std::memory_order_release);
}
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