[ create a new paste ] login | about

Link: http://codepad.org/uAOzZn8c    [ raw code | fork ]

C++, pasted on Jun 10:
#include <windows.h>
#include <pdh.h>
#include <pdhmsg.h>
#include <iostream>
template <typename T> T type_cast(T, void* p) { return (T)p; }
static PDH_STATUS (WINAPI *pPdhOpenQueryW)(LPCWSTR, DWORD_PTR, PDH_HQUERY*);
static PDH_STATUS (WINAPI *pPdhAddCounterW)(PDH_HQUERY, LPCWSTR, DWORD_PTR, PDH_HCOUNTER*);
static PDH_STATUS (WINAPI *pPdhCollectQueryData)(PDH_HQUERY);
static PDH_STATUS (WINAPI *pPdhGetFormattedCounterValue)(PDH_HCOUNTER, DWORD, LPDWORD, PPDH_FMT_COUNTERVALUE);
static PDH_STATUS (WINAPI *pPdhCloseQuery)(PDH_HQUERY);
static PDH_STATUS (WINAPI *pPdhRemoveCounter)(PDH_HCOUNTER);

PDH_STATUS DispTime()
{
	HQUERY hQuery;
	HCOUNTER hCounter;

	PDH_STATUS status;
	PDH_FMT_COUNTERVALUE FmtValue;

	/* 新規クエリーを作成 */
	status = pPdhOpenQueryW(NULL, 0, &hQuery);

	/* 既に起動しているメモ帳のCPU使用率のカウンタをクエリーに追加 */
	status = pPdhAddCounterW(hQuery, L"\\Processor(0)\\% Processor Time", 0, &hCounter);

	/* 計測 */
	printf("計測開始...\n");
	status = pPdhCollectQueryData(hQuery);

	Sleep(10000); /* 十秒間待つ */

	status = pPdhCollectQueryData(hQuery);
	printf("計測終了.\n");

	/* 今の十秒間での、メモ帳のCPUの使用率を表示 */

	status = pPdhGetFormattedCounterValue(hCounter, PDH_FMT_DOUBLE, NULL, &FmtValue);
	printf("CPU使用率: %f%%\n", FmtValue.doubleValue);

	/* 終了 */
	status = pPdhCloseQuery(hQuery);
	return status;
}

int main()
{
	HMODULE hmodPDH = LoadLibrary("pdh.dll");
	pPdhOpenQueryW = type_cast(pPdhOpenQueryW, GetProcAddress(hmodPDH, "PdhOpenQueryW"));
	pPdhAddCounterW = type_cast(pPdhAddCounterW,GetProcAddress(hmodPDH, "PdhAddCounterW"));
	pPdhRemoveCounter = type_cast(pPdhRemoveCounter,GetProcAddress(hmodPDH, "PdhRemoveCounter"));
	pPdhCollectQueryData = type_cast(pPdhCollectQueryData,GetProcAddress(hmodPDH, "PdhCollectQueryData"));
	pPdhGetFormattedCounterValue = type_cast(pPdhGetFormattedCounterValue,GetProcAddress(hmodPDH, "PdhGetFormattedCounterValue"));
	pPdhCloseQuery = type_cast(pPdhCloseQuery,GetProcAddress(hmodPDH, "PdhCloseQuery"));
	DispTime();
	FreeLibrary(hmodPDH);
	return 0;
}


Create a new paste based on this one


Comments: