Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles
(untagged)

DynData v1.0 - Win95/98 Performance Counters

0.00/5 (No votes)
3 Mar 2000 1  
A collection of freeware MFC classes to encapsulate the Windows 95/98 performance counters.

 

Introduction

Welcome to DynData v1.0, a collection of freeware MFC classes to encapsulate the performance counters as stored under the HKEY_DYN_DATA registry key on Windows 95/98.

 

 

Features
History
API Reference
Usage
Contacting the Author

 


Features

  • Simple and clean C++ interface based.
  • The classes are fully Unicode compliant (even though HKEY_DYN_DATA is not available on NT <g>)
  • Full documentation is provided in the form of a HTML file.

The source zip file contains the source code and a simple console based application which exercises the class.


History

V1.0 (31 January 1999)

  • Initial Release.


API Reference

The DynData classes provide the following functions:

CDynDataObject::CDynDataObject
CDynDataObject::EnumCounters
CDynDataEnumerator::EnumObjects
CDynDataCounter::Start
CDynDataCounter::Collect
CDynDataCounter::Stop

 

CDynDataObject::CDynDataObject

 

CDynDataObject::CDynDataObject(LPCTSTR pszObjName, HKEY hObjectKey);
CDynDataObject::CDynDataObject(LPCTSTR pszObjName, LPCTSTR pszComputerName);

Parameters:

  • pszObjName -- This is the name of the performance object e.g. "Dial-Up Adapter" or "Kernel".
  • hObjectKey -- This is the registry key which represents the performance object.
  • pszComputerName -- This is the name of the computer on which to open the performance object. Set this value to NULL to open the object on the local machine.

Remarks:
Constructs a performance object which can be later used for enumeration. The first version of the constructor is used internally by the CDynDataEnumerator class. Normally to enumerate the counters which an object has you would use the second version. Another point to bear in mind is that since the two constructors look pretty much identical, you will need to cast the NULL to a LPCTSTR if you are calling the second constructor yourself.

 

CDynDataObject::EnumCounters

 

BOOL CDynDataObject::EnumCounters(ENUMERATE_DYNDATA_OBJECT_COUNTERS lpEnumFunc, DWORD dwItemData = 0);

Return Value:
TRUE if at least one counter was successfully enumerated for the performance object otherwise FALSE.

Parameters:

  • lpEnumFunc -- The function to be used as the call-back when enumerating the counters which this object has.
  • dwItemData -- This is a DWORD which can be anything you want and will be sent to the call-back function.

Remarks:
The call-back function is of the form:

typedef BOOL (*ENUMERATE_DYNDATA_OBJECT_COUNTERS)(DWORD dwItemData, CDynDataObject& object, const CString& sRegistryName, const CString& sCommonName, const CString& sDescription, BOOL bDifferentiate);

  • dwItemData -- The value as presented in the EnumCounters function.
  • object -- The parameter represents the performance object being enumerated.
  • sRegistryName -- The name of the counter as stored in the registry.
  • sCommonName -- The name of the counter which you would display to an end user.
  • sDescription -- A description of the counter.
  • bDifferentiate -- If TRUE, then the counter represents a rate such as Bytes Received per Second as opposed to an absolute value such as bytes sent.

Returning TRUE from the call-back function will continue the enumeration while returning FALSE will cause the enumeration to stop.

 

CDynDataEnumerator::EnumObjects

 

BOOL CDynDataEnumerator::EnumObjects(ENUMERATE_DYNDATA_OBJECTS lpEnumFunc, DWORD dwItemData = 0, LPCTSTR pszComputerName = NULL);

Return Value:
TRUE if at least one object was successfully enumerated otherwise FALSE.

Parameters:

  • lpEnumFunc -- The function to be used as the call-back when enumerating the performance objects.
  • dwItemData -- This is the value as presented in the EnumObjects() function.
  • pszComputerName -- This is the name of the computer of which to enumerate the performance objects. Set this value to NULL to enumerate the objects on the local machine.

Remarks:
The call-back function is of the form:

typedef BOOL (*ENUMERATE_DYNDATA_OBJECTS)(DWORD dwItemData, CDynDataObject& object);

 

  • dwItemData -- The value as in the EnumObjects function.
  • object -- Represents the current performance object being enumerated.

 

CDynDataCounter::Start

 

BOOL CDynDataCounter::Start(LPCTSTR pszObjName, LPCTSTR pszCounterName, LPCTSTR pszComputerName = NULL);

Return Value:
TRUE if collection of the performance data was started otherwise FALSE.

Parameters:

  • pszObjName -- The name of the performance object e.g. "KERNEL".
  • pszCounterName -- The name of the counter for the performance object e.g. "CPUUsage".
  • pszComputerName -- This is the name of the computer on which the counter is to be collected. Set this value to NULL to start collection on the local machine.

Remarks:
Starts collection of the performance data.

 

CDynDataCounter::Collect

 

BOOL CDynDataCounter::Collect(DWORD& dwData);

Return Value:
TRUE if collection of the performance data was successful otherwise FALSE.

Parameters:

  • dwData -- Upon successful return of the function this will contain the actual value of the performance counter.

Remarks:
Retrieves the current value of the performance counter.

 

CDynDataCounter::Stop

 

BOOL CDynDataCounter::Stop();

Return Value:
TRUE if collection of the performance data was successfully stopped otherwise FALSE.

Remarks:
Stops retrieval of the performance counter.

 


Usage

  • To use the classes in your code, just #include "dyndata.h" in which ever module requires it and also include the dyndata .cpp and .h files in your project.
  • The code is specific to Windows 95/98 and will fail on NT, since NT provides its own kind of performance data using a different retrieval mechanism.


Contacting the Author

PJ Naughter
Email: pjn@indigo..ie
Web: http://www.naughter.com
31 January 1999

 

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here