63 lines
1.4 KiB
C++
63 lines
1.4 KiB
C++
// Copyright 2011-2020 Molecular Matters GmbH, all rights reserved.
|
|
|
|
#if LC_VERSION == 1
|
|
|
|
// BEGIN EPIC MOD
|
|
//#include PCH_INCLUDE
|
|
// END EPIC MOD
|
|
#include "LC_HeartBeat.h"
|
|
#include "LC_InterprocessMutex.h"
|
|
#include "LC_NamedSharedMemory.h"
|
|
#include "LC_UtcTime.h"
|
|
#include "LC_PrimitiveNames.h"
|
|
|
|
|
|
HeartBeat::HeartBeat(const wchar_t* const processGroupName, Process::Id processId)
|
|
: m_mutex(nullptr)
|
|
, m_memory(nullptr)
|
|
{
|
|
m_mutex = new InterprocessMutex(primitiveNames::HeartBeatMutex(processGroupName, processId).c_str());
|
|
m_memory = Process::CreateNamedSharedMemory(primitiveNames::HeartBeatNamedSharedMemory(processGroupName, processId).c_str(), 4096u);
|
|
}
|
|
|
|
|
|
HeartBeat::~HeartBeat(void)
|
|
{
|
|
Process::DestroyNamedSharedMemory(m_memory);
|
|
delete m_mutex;
|
|
}
|
|
|
|
|
|
void HeartBeat::Store(void)
|
|
{
|
|
const uint64_t currentTime = utcTime::GetCurrent();
|
|
|
|
InterprocessMutex::ScopedLock lock(m_mutex);
|
|
Process::WriteNamedSharedMemory(m_memory, currentTime);
|
|
}
|
|
|
|
|
|
uint64_t HeartBeat::ReadBeatDelta(void) const
|
|
{
|
|
const uint64_t currentTime = utcTime::GetCurrent();
|
|
const uint64_t heartBeat = ReadBeat();
|
|
|
|
if (currentTime >= heartBeat)
|
|
{
|
|
return currentTime - heartBeat;
|
|
}
|
|
else
|
|
{
|
|
return heartBeat - currentTime;
|
|
}
|
|
}
|
|
|
|
|
|
uint64_t HeartBeat::ReadBeat(void) const
|
|
{
|
|
InterprocessMutex::ScopedLock lock(m_mutex);
|
|
return Process::ReadNamedSharedMemory<uint64_t>(m_memory);
|
|
}
|
|
|
|
|
|
#endif // LC_VERSION
|