J'essaie d'utiliser les compteurs de performance Windows pour obtenir l'utilisation des octets virtuels d'un processus spécifique. Il m'a semblé plus simple de lire l'utilisation du% processeur, alors j'ai pensé que j'essaierais de faire en sorte que ça marche en premier.Pourquoi mon code de compteur de performance ne fonctionne-t-il pas?
En haut du fichier, j'ai ceci:
#include <pdh.h>
#include <pdhmsg.h>
Puis, en fonction, j'ai ceci:
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 est macro qui est utilisé sur le projet de faire valoir. L'état est ERROR_SUCCESS à chaque appel jusqu'à l'appel de PdhGetRawCounterValue(). Lorsque j'appelle cette fonction, le résultat est 0xC0000BBC qui est défini dans pdhmsg.h comme PDH_INVALID_HANDLE. La raison de l'appel à Sleep() est que this page indique que vous devez lire deux échantillons pour certains compteurs et attendre au moins une seconde entre les deux.
Est-ce que je fais quelque chose de mal?