Membaca Data Performa dari File Log
Contoh di bawah ini membaca data yang telah ditulis ke file log dalam contoh Menulis Data Performa ke File Log. Ini menggunakan fungsiPdhCollectQueryData untuk mengambil data dari file log dan fungsi PdhGetFormattedCounterValue untuk memformat data untuk ditampilkan.
#include <windows.h>
#include <stdio.h>
#include <pdh.h>
#include <pdhmsg.h>
#pragma comment(lib, "pdh.lib")
CONST PWSTR COUNTER_PATH = L"\\Processor(0)\\% Processor Time";
void DisplayCommandLineHelp(void)
{
wprintf(L"The command line must contain a valid log file name.\n");
}
void wmain(int argc, WCHAR **argv)
{
HQUERY hQuery = NULL;
HCOUNTER hCounter = NULL;
PDH_STATUS status = ERROR_SUCCESS;
DWORD dwFormat = PDH_FMT_DOUBLE;
PDH_FMT_COUNTERVALUE ItemBuffer;
if (argc != 2)
{
DisplayCommandLineHelp();
goto cleanup;
}
// Opens the log file to write performance data
status = PdhOpenQuery(argv[1], 0, &hQuery);
if (ERROR_SUCCESS != status)
{
wprintf(L"PdhOpenQuery failed with 0x%x\n", status);
goto cleanup;
}
// Add the same counter used when writing the log file.
status = PdhAddCounter(hQuery, COUNTER_PATH, 0, &hCounter);
if (ERROR_SUCCESS != status)
{
wprintf(L"PdhAddCounter failed with 0x%x\n", status);
goto cleanup;
}
// Read a performance data record.
status = PdhCollectQueryData(hQuery);
if (ERROR_SUCCESS != status)
{
wprintf(L"PdhCollectQueryData failed with 0x%x\n", status);
goto cleanup;
}
while (ERROR_SUCCESS == status)
{
// Read the next record
status = PdhCollectQueryData(hQuery);
if (ERROR_SUCCESS == status)
{
// Format the performance data record.
status = PdhGetFormattedCounterValue(hCounter,
dwFormat,
(LPDWORD)NULL,
&ItemBuffer);
if (ERROR_SUCCESS != status)
{
wprintf(L"PdhGetFormattedCounterValue failed with 0x%x.\n", status);
goto cleanup;
}
wprintf(L"Formatted counter value = %.20g\n", ItemBuffer.doubleValue);
}
else
{
if (PDH_NO_MORE_DATA != status)
{
wprintf(L"PdhCollectQueryData failed with 0x%x\n", status);
}
}
}
cleanup:
// Close the query.
if (hQuery)
PdhCloseQuery(hQuery);
}