accuratetimer.cpp

来自「视频监控vc源代码.对于做视频系统的朋友们很有帮助」· C++ 代码 · 共 54 行

CPP
54
字号

#include "accuratetimer.h"

CAccurateTimer::CAccurateTimer(void)
:lpCallback(NULL) {
   m_nTickTimeMark= timeGetTime();
   GetSystemTimeAsFileTime( (LPFILETIME)&m_n64TimeMark );
   hEvent=CreateEvent(NULL,false,false,NULL);
   uID=0;
}

CAccurateTimer::~CAccurateTimer(void) {
	StopEvent();
	CloseHandle(hEvent);
}

LONGLONG CAccurateTimer::Time(void) {
   return(timeGetTime()-m_nTickTimeMark)*10000+m_n64TimeMark;
}

int CAccurateTimer::Sleep(unsigned long nTime) {
   UINT id;
   id=timeSetEvent(nTime,0,(LPTIMECALLBACK)hEvent,0,TIME_ONESHOT|TIME_CALLBACK_EVENT_SET);
   WaitForSingleObject(hEvent,nTime+10);
   timeKillEvent(id);
   return 0;
}

void CALLBACK CAccurateTimer::TimeProc(UINT uID, UINT uMsg, DWORD dwUser, DWORD dwR1,DWORD dwR2) {
   CAccurateTimer &pthis=*((CAccurateTimer*)dwUser);
   pthis.lpCallback(uID,pthis,pthis.dwParam);
}

int CAccurateTimer::SetEvent(unsigned long nTime , LPACTIMER_ROUTINE lpCallBack,DWORD dwParam) {
   if ( lpCallBack==NULL )
      return -1;
   uID=timeSetEvent(nTime,0,CAccurateTimer::TimeProc,(DWORD_PTR)this,TIME_CALLBACK_FUNCTION|TIME_PERIODIC);
   if ( uID==0 )
      return -1;
   this->lpCallback=lpCallBack;
   this->dwParam=dwParam;
   return 0;
}

int CAccurateTimer::StopEvent(void) {
   if ( uID!=0 ) {
      timeKillEvent(uID);
      this->lpCallback=NULL;
      uID=0;
   } else
      return -1;
   return 0;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?