📄 accuratetimer.cpp
字号:
#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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -