Почему мой код счетчика производительности не работает? - PullRequest
2 голосов
/ 01 ноября 2010

Я пытаюсь использовать счетчики производительности 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 () состоит в том, что эта страница говорит, что вам нужно прочитать два образца для некоторых счетчиков и подождать хотя бы одну секунду между ними.

Я что-то не так делаю?

1 Ответ

3 голосов
/ 01 ноября 2010

Я думаю, вам нужно удалить амперсанд (не берите адрес счетчика):

status = PdhGetRawCounterValue(counter, NULL, &rawValue);

И похоже, что вызов PdhCloseQuery также, вероятно, не должен передавать адрес параметра.

status = PdhCloseQuery(query);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...