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

More by Author

Must Read