/*
* PerformanceQuery.h
* Copyright (c) 2011 Antillia.com TOSHIYUKI ARAI. ALL RIGHTS RESERVED.
*/
// SOL9
// 2009/09/25
#pragma once
#include <sol/pdh/PdhObject.h>
#include <sol/pdh/PerformanceCounter.h>
namespace SOL {
class PerformanceQuery :public PdhObject {
private:
HQUERY hQuery;
public:
PerformanceQuery()
:hQuery(NULL)
{
PDH_STATUS status = PdhOpenQuery(NULL, 0, &hQuery);
if (status != ERROR_SUCCESS) {
throw (int)status;
}
}
public:
~PerformanceQuery()
{
if (hQuery) {
PdhCloseQuery(hQuery);
hQuery = NULL;
}
}
public:
PDH_STATUS addCounter(const TCHAR* path, PerformanceCounter& counter)
{
PDH_STATUS status = (PDH_STATUS)-1;;
if (hQuery) {
HCOUNTER hCounter;
status = PdhAddCounter(hQuery, path, 0, &hCounter);
if (status == ERROR_SUCCESS) {
counter.setCounter(hCounter);
} else {
throw (int)status;
}
}
return status;
}
public:
PDH_STATUS collect()
{
PDH_STATUS status = (PDH_STATUS)-1;;
if (hQuery) {
status = PdhCollectQueryData(hQuery);
if (status != ERROR_SUCCESS) {
throw (int)status;
}
}
return status;
}
};
}
|