mirror of
https://github.com/holub/mame
synced 2025-04-30 19:57:11 +03:00
50 lines
1.1 KiB
C++
50 lines
1.1 KiB
C++
#include "TimeHelpers.h"
|
|
|
|
#define WIN32_LEAN_AND_MEAN
|
|
#include <windows.h>
|
|
|
|
namespace UnitTest {
|
|
|
|
Timer::Timer()
|
|
: m_threadHandle(::GetCurrentThread())
|
|
, m_startTime(0)
|
|
{
|
|
#if defined(UNITTEST_WIN32) && (_MSC_VER == 1200) // VC6 doesn't have DWORD_PTR
|
|
typedef unsigned long DWORD_PTR;
|
|
#endif
|
|
|
|
DWORD_PTR systemMask;
|
|
::GetProcessAffinityMask(GetCurrentProcess(), &m_processAffinityMask, &systemMask);
|
|
::SetThreadAffinityMask(m_threadHandle, 1);
|
|
::QueryPerformanceFrequency(reinterpret_cast< LARGE_INTEGER* >(&m_frequency));
|
|
::SetThreadAffinityMask(m_threadHandle, m_processAffinityMask);
|
|
}
|
|
|
|
void Timer::Start()
|
|
{
|
|
m_startTime = GetTime();
|
|
}
|
|
|
|
double Timer::GetTimeInMs() const
|
|
{
|
|
__int64 const elapsedTime = GetTime() - m_startTime;
|
|
double const seconds = double(elapsedTime) / double(m_frequency);
|
|
return seconds * 1000.0;
|
|
}
|
|
|
|
__int64 Timer::GetTime() const
|
|
{
|
|
LARGE_INTEGER curTime;
|
|
::SetThreadAffinityMask(m_threadHandle, 1);
|
|
::QueryPerformanceCounter(&curTime);
|
|
::SetThreadAffinityMask(m_threadHandle, m_processAffinityMask);
|
|
return curTime.QuadPart;
|
|
}
|
|
|
|
void TimeHelpers::SleepMs(int ms)
|
|
{
|
|
::Sleep(ms);
|
|
}
|
|
|
|
}
|