Prestatiegegevens lezen uit een logboekbestand
Het volgende voorbeeld leest gegevens die zijn geschreven naar een logboekbestand in het voorbeeld Prestatiegegevens naar een logboekbestand schrijven. Hierbij wordt de functie PdhCollectQueryData gebruikt om de gegevens op te halen uit het logboekbestand en de functie PdhGetFormattedCounterValue om de gegevens op te maken voor weergave.
#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);
}