Я пытаюсь использовать счетчики производительности Windows, чтобы использовать виртуальные байты определенного процесса.Казалось, проще читать% загрузки ЦП, поэтому я подумал, что сначала попробую заставить это работать.
В верхней части файла у меня есть это:
#include <pdh.h>
#include <pdhmsg.h>
Затемв функции у меня есть это:
PDH_STATUS status = ERROR_SUCCESS;
PDH_HQUERY query = NULL;
status = PdhOpenQuery(
NULL,
0,
&query);
CHECK(status == ERROR_SUCCESS, L"Couldn't create query.");
PDH_HCOUNTER counter = NULL;
status = PdhAddCounter(query, L"\\Processor(_Total)\\% Processor Time", 0, &counter);
CHECK(status == ERROR_SUCCESS, L"Couldn't add counter.");
status = PdhCollectQueryData(query);
CHECK(status == ERROR_SUCCESS, L"Couldn't collect query data.");
Sleep(2000);
status = PdhCollectQueryData(query);
CHECK(status == ERROR_SUCCESS, L"Couldn't collect query data.");
Sleep(2000);
PDH_RAW_COUNTER rawValue;
status = PdhGetRawCounterValue(&counter, NULL, &rawValue);
CHECK(status == ERROR_SUCCESS, L"Couldn't get the raw counter value.");
status = PdhCloseQuery(&query);
CHECK(status == ERROR_SUCCESS, L"Couldn't close the query handle.");
CHECK - это макрос, который используется в проекте для утверждения.Состояние - ERROR_SUCCESS при каждом вызове до вызова PdhGetRawCounterValue ().Когда я вызываю эту функцию, результатом является 0xC0000BBC, который определен в pdhmsg.h как PDH_INVALID_HANDLE.Причина вызова Sleep () состоит в том, что эта страница говорит, что вам нужно прочитать два образца для некоторых счетчиков и подождать хотя бы одну секунду между ними.
Я что-то не так делаю?