win32_timer_impl.cpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00033 #include "gpucalc/win32_timer_impl.h"
00034
00035
00036 #include <windows.h>
00037
00038 namespace gpucalc
00039 {
00040
00041
00042 template<> Timer * Singleton<Timer>::mSingleton = 0;
00043
00044
00045 Timer * Timer::getSingletonPtr()
00046 {
00047 return mSingleton;
00048 }
00049
00050
00051 Timer & Timer::getSingleton()
00052 {
00053 assert(mSingleton);
00054 return(* mSingleton);
00055 }
00056
00057
00058 Timer::Timer(): Singleton<Timer>(_Win32TimerName)
00059 {
00060 LARGE_INTEGER start;
00061 LARGE_INTEGER freq;
00062 QueryPerformanceCounter(&start);
00063 QueryPerformanceFrequency(&freq);
00064 mStartTime = start.QuadPart;
00065 mFrequency = freq.QuadPart;
00066 GetProcessAffinityMask(GetCurrentProcess(), &mProcAffinity, &mSysAffinity);
00067 mThread = GetCurrentThread();
00068 }
00069
00070
00071 Timer::~Timer()
00072 {
00073 }
00074
00075
00076 double Timer::getTime()
00077 {
00078 return static_cast<double>(getCounter()) / static_cast<double>(mFrequency);
00079 }
00080
00081 __int64 Timer::getCounter()
00082 {
00083 SetProcessAffinityMask(mThread, 1);
00084 LARGE_INTEGER c;
00085 QueryPerformanceCounter(&c);
00086 SetProcessAffinityMask(mThread, mProcAffinity);
00087 return c.QuadPart;
00088 }
00089 }