⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stopwatch.cpp

📁 没有什么可以说的 自己看
💻 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 + -