A Class To Encapsulate MultiMedia Timers

This simple class encapsulates the multimedia timers. To use the class include mmTimers.cpp and mmTimers.h in your project. Link with winmm.lib. To use a timer derive a class from CMMTimers and override member timerProc. timerProc will be called when the timer goes off. Instantiate a variable of the new class. The parameter to the constructor is the timer resolution in ms. To start a timer call startTimer. The first parameter specifies the period of the timer in ms. The second parameter specifies whether the timer is a one shot or periodic timer. To stop a periodic timer call stopTimer.

This code was developed with Visual C++ 5.0 and has been tested on NT 4.0.

The source follows:

The header file, mmTimers.h

#ifndef	___multimedia_timers___
#define	___multimedia_timers___


class CMMTimers
 CMMTimers(UINT resolution);
 virtual ~CMMTimers();

 UINT	getTimerRes() { return timerRes; };

 bool	startTimer(UINT period,bool oneShot);
 bool	stopTimer();

 virtual void timerProc() {};

 UINT	timerRes;
 UINT	timerId;


The source file, mmTimers.cpp

#include	"StdAfx.h"
#include	"mmTimers.h"

CMMTimers::CMMTimers(UINT resolution) : timerRes(0), timerId(0)

 if (TIMERR_NOERROR == timeGetDevCaps(&tc,sizeof(TIMECAPS)))
  timerRes = min(max(tc.wPeriodMin,resolution),tc.wPeriodMax);

 if (0 != timerRes)
  timerRes = 0;

extern "C"
void CALLBACK internalTimerProc(UINT id, UINT msg,
DWORD dwUser, DWORD dw1, DWORD dw2)
 CMMTimers *	timer = (CMMTimers *)dwUser;


bool CMMTimers::startTimer(UINT period,bool oneShot)
 bool		res = false;
 MMRESULT	result;

 result = timeSetEvent(period, timerRes, internalTimerProc,
 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;

Download source - 1 KB

Date Last Updated: May 17, 1999