Listing 4
(a)
#ifndef __PROFILER_H__
#define __PROFILER_H__
#include <windows.h>
#include "IMciEvents.h"
class Profiler : public IMciEvents
{
public:
// IMciEvents methods
virtual void OnEnter(const std::string & filename, int lineNumber,
const MethodInfo & mi);
virtual void OnLeave(const std::string & filename, int lineNumber,
const MethodInfo & mi);
private:
DWORD m_start;
};
#endif
(b)
#include "Profiler.h"
#include "MethodInfo.h"
#include <iostream>
using std::cout;
using std::endl;
using std::string;
void Profiler::OnEnter(const string & filename, int lineNumber,
const MethodInfo & mi)
{
m_start = ::GetTickCount();
}
void Profiler::OnLeave(const string & filename, int lineNumber,
const MethodInfo & mi)
{
DWORD duration = ::GetTickCount() - m_start;
cout << endl << "Method '" << mi.className << "::" << mi.name <<
"' took " << duration << " milli-seconds";
}