A Class To Encapsulate MultiMedia Timers
Posted
by Simon Wood
on May 17th, 1999
This code was developed with Visual C++ 5.0 and has been tested on NT 4.0.
The source follows:
#ifndef ___multimedia_timers___ #define ___multimedia_timers___ #includeThe source file, mmTimers.cppclass CMMTimers { public: CMMTimers(UINT resolution); virtual ~CMMTimers(); UINT getTimerRes() { return timerRes; }; bool startTimer(UINT period,bool oneShot); bool stopTimer(); virtual void timerProc() {}; protected: UINT timerRes; UINT timerId; }; #endif
#include "StdAfx.h" #include "mmTimers.h" CMMTimers::CMMTimers(UINT resolution) : timerRes(0), timerId(0) { TIMECAPS tc; if (TIMERR_NOERROR == timeGetDevCaps(&tc,sizeof(TIMECAPS))) { timerRes = min(max(tc.wPeriodMin,resolution),tc.wPeriodMax); timeBeginPeriod(timerRes); } } CMMTimers::~CMMTimers() { stopTimer(); if (0 != timerRes) { timeEndPeriod(timerRes); timerRes = 0; } } extern "C" void CALLBACK internalTimerProc(UINT id, UINT msg, DWORD dwUser, DWORD dw1, DWORD dw2) { CMMTimers * timer = (CMMTimers *)dwUser; timer->timerProc(); } bool CMMTimers::startTimer(UINT period,bool oneShot) { bool res = false; MMRESULT result; result = timeSetEvent(period, timerRes, internalTimerProc, (DWORD)this,oneShot ? TIME_ONESHOT : TIME_PERIODIC); if (NULL != result) { timerId = (UINT)result; res = true; } return res; } bool CMMTimers::stopTimer() { MMRESULT result; result = timeKillEvent(timerId); if (TIMERR_NOERROR == result) timerId = 0; return TIMERR_NOERROR == result; }
Date Last Updated: May 17, 1999