add Chapter14
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
#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);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
#ifndef UNITTEST_TIMEHELPERS_H
|
||||
#define UNITTEST_TIMEHELPERS_H
|
||||
|
||||
#include "../Config.h"
|
||||
#include "../HelperMacros.h"
|
||||
|
||||
#ifdef UNITTEST_MINGW
|
||||
#ifndef __int64
|
||||
#define __int64 long long
|
||||
#endif
|
||||
#endif
|
||||
|
||||
namespace UnitTest {
|
||||
|
||||
class UNITTEST_LINKAGE Timer
|
||||
{
|
||||
public:
|
||||
Timer();
|
||||
void Start();
|
||||
double GetTimeInMs() const;
|
||||
|
||||
private:
|
||||
__int64 GetTime() const;
|
||||
|
||||
void* m_threadHandle;
|
||||
|
||||
#if defined(_WIN64)
|
||||
unsigned __int64 m_processAffinityMask;
|
||||
#else
|
||||
unsigned long m_processAffinityMask;
|
||||
#endif
|
||||
|
||||
__int64 m_startTime;
|
||||
__int64 m_frequency;
|
||||
};
|
||||
|
||||
|
||||
namespace TimeHelpers
|
||||
{
|
||||
UNITTEST_LINKAGE void SleepMs(int ms);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user