TIMECAPS tc;
//通过函数 timeGetDevCaps
取出系统
的分辨率取值范围(对 intel
系统,
1~16 毫秒),//
如果无错则继续
if(timeGetDevCaps(&tc, sizeof(TIMECAPS))
== TIMERR_NOERROR)
{
//
分辨率的值不能超出系统的取值范围
wAccuracy = min(max(tc.wPeriodMin,
TIMER_ACCURACY),tc.wPeriodMax);
//调用 timeBeginPeriod
函数设置定时器
的分辨率,类似于 for
循环的步长
timeBeginPeriod(wAccuracy);
//
设置定时器
InitializeTimer();
}
}
CCureApp::~CCureApp()
{
//
结束时钟
fout < < "结束时钟" < < endl;
//
删除两个定时器
timeKillEvent(TimerID_1ms);
timeKillEvent(TimerID_2s);
//
删除设置的分辨率
timeEndPeriod(wAccuracy);
}
注:使用完的定时器及分辨率一定
要删除,否则系统会越来越慢。
void CCureApp::InitializeTimer()
{
StartOneMilliSecondTimer();
StartTwoSecondTimer();
}
//
一毫秒定时器的回调函数,
类似于中断处理程序
voidPASCAL//一定要声明为全局 PASCAL
函数,
否则编译会有问题
OneMilliSecondProc(UINT wTimerID, UINT msg,
DWORD dwUser, DWORD dw1, DWORD dw2)
{
static int ms = 0;//
定义计数器
CCureApp *app = (CCureApp *)dwUser;
//
取得系统时间以毫秒为单位
DWORD osBinaryTime = GetTickCount();
//
输出计数器值和当前系统时间到文件
app- >fout < < ++ms < < ": 1ms : "
< < osBinaryTime < < endl;
}
//加装 1
毫秒定时器
void CCureApp::StartOneMilliSecondTimer()
{
if((TimerID_1ms = timeSetEvent(wTimerRes_1ms, wAccuracy
,