📄 stopwatch.cpp
字号:
#include "Stopwatch.h"
#include "mmsystem.h" //Multimedia timers
#include "timers_i.c"
#include "StopwatchClassFactory.h"
CStopwatch::CStopwatch()
{
m_nStartTime.QuadPart=0;
m_nReferenceCount=0;
//m_nFrequency返回频率值
QueryPerformanceFrequency((LARGE_INTEGER*) &m_nFrequency);
}
CStopwatch::~CStopwatch()
{
}
HRESULT _stdcall CStopwatch::QueryInterface(REFIID riid,void **ppvObject)
{
HRESULT hr=S_OK;
if (riid==IID_IUnknown)
*ppvObject=static_cast<IUnknown*>(static_cast<IStopwatch*>(this));
else if (riid==IID_IStopwatch)
*ppvObject=static_cast<IStopwatch*>(this);
else
{
ppvObject=NULL;
hr=E_NOINTERFACE;
}
if(SUCCEEDED(hr))
(static_cast<IUnknown*>(*ppvObject))->AddRef();
return hr;
}
unsigned long _stdcall CStopwatch::AddRef()
{
if (InterlockedIncrement(&m_nReferenceCount)==1)
InterlockedIncrement(&g_nServerLockCount);
return m_nReferenceCount;
}
unsigned long _stdcall CStopwatch::Release()
{
if(InterlockedDecrement(&m_nReferenceCount)==0) //实现m_nReferenceCount自减
{
delete this;
InterlockedDecrement(&g_nServerLockCount);
return 0;
}
return m_nReferenceCount;
}
HRESULT _stdcall CStopwatch::Start()
{
if (QueryPerformanceCounter((LARGE_INTEGER*) &m_nStartTime))
return S_OK;
else
return E_FAIL;
}
HRESULT _stdcall CStopwatch::ElapsedTime(float *Time)
{
HRESULT hr;
LARGE_INTEGER nStopTime;
if (!QueryPerformanceCounter((LARGE_INTEGER*) &nStopTime) || (m_nStartTime.QuadPart==0))
hr=E_FAIL;
else
{
*Time=(float)(nStopTime.QuadPart-m_nStartTime.QuadPart);
*Time=(*Time/m_nFrequency.QuadPart);
hr=S_OK;
}
return hr;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -