recuperer les infos du processeur ... [C,C++] - C++ - Programmation
Marsh Posté le 08-07-2002 à 12:35:00
Donne plus d'explications concernant ton appli! Comment elle fonctionne? Sous quoi tu programmes?
Je viens de finir une appli qui utilise cette lib et je pourrai carrement t'aider mais j'ai besoin de plus de precisions.
Marsh Posté le 08-07-2002 à 21:52:34
Salut !!!! Et merci beaucoup pour ton aide ...
en fait, je bosse avec VC++6.0 et mon soucis est le suivant :
porter une appli qui tournait sous WIN NT 4.0 vers WIN 2K et surtout WIN XP.
Mon probleme, c'est que lorsque je fait un PdhAddCounter sur le libelle : \Processor(0)\% Processor Time !!!
ben ca marche pas et il me retourne l'erreur : PDH_CSTATUS_NO_OBJECT (The specified object could not be found.)
Je comprend pas trop pourquoi ???
si tu as une idee a me suggerer, je suis preneur !!!
MERCI BEAUCOUP PAR AVANCE !!!
Marsh Posté le 09-07-2002 à 09:16:04
Dans un premier temps il faut que tu crees une query a l'aide de la fonction PdhOpenQuery(). Ensuite tu appelles ta fonction PdhAddCounter();
ex :
Code :
|
Voila, normalement ca devrait marcher. Je crois que ton probleme venait au niveau de ton path, il ne faut pas oublie de rajouter le nom de la machine et puis de doubler les '\'.
Marsh Posté le 09-07-2002 à 09:45:38
OK merci beaucoup, je m'en vais appliquer tes conseils !!!
Marsh Posté le 09-07-2002 à 10:13:00
bouh!, il est mechant avec moi :
voila mon code...
PDH_STATUS pdhStatus;
// etape 1
pdhStatus = PdhOpenQuery (NULL, 0, &_hQuery);
VERIFY (pdhStatus == ERROR_SUCCESS);
// etape 2
char computerName[100];
gethostname(computerName, 99);
CString path = "\\\\";
path += computerName;
path += "\\Processor(0)\\%Processor Time";
pdhStatus = PdhAddCounter(_hQuery, path, 0, &_pCounterProcessorTime);
VERIFY (pdhStatus == ERROR_SUCCESS);
// etape 3
pdhStatus = PdhCollectQueryData (_hQuery);
VERIFY (pdhStatus == ERROR_SUCCESS);
Tout marche impecc jusqu'a l'etape 3, c'est a dire PdhCollectQueryData ....
il me retourne alors l'erreur suivante : PDH_NO_DATA (The query does not currently have any counters).
Pourtant l'etape 2 semble se passer correctement (je passe le VERIFY sans pb) et ce grace a toi !!!
Je voudrais pas abuser de ton temps, mais si tu as une autre piste pour moi, je suis preneur !
Marsh Posté le 09-07-2002 à 10:38:56
velleronnais a écrit a écrit : bouh!, il est mechant avec moi : voila mon code... PDH_STATUS pdhStatus; // etape 1 pdhStatus = PdhOpenQuery (NULL, 0, &_hQuery); VERIFY (pdhStatus == ERROR_SUCCESS); // etape 2 char computerName[100]; gethostname(computerName, 99); CString path = "\\\\"; path += computerName; path += "\\Processor(0)\\%Processor Time"; pdhStatus = PdhAddCounter(_hQuery, path, 0, &_pCounterProcessorTime); VERIFY (pdhStatus == ERROR_SUCCESS); // etape 3 pdhStatus = PdhCollectQueryData (_hQuery); VERIFY (pdhStatus == ERROR_SUCCESS); Tout marche impecc jusqu'a l'etape 3, c'est a dire PdhCollectQueryData .... il me retourne alors l'erreur suivante : PDH_NO_DATA (The query does not currently have any counters). Pourtant l'etape 2 semble se passer correctement (je passe le VERIFY sans pb) et ce grace a toi !!! Je voudrais pas abuser de ton temps, mais si tu as une autre piste pour moi, je suis preneur ! |
Je crois qu'il manque un espace entre "%" et "Processor"! Ca tiens vraiment a rien!!
Marsh Posté le 09-07-2002 à 12:09:42
bon je vais finir par croire que Microsoft m'en veut a mort ... ca marche pas avec moi ....
PDH_STATUS pdhStatus;
pdhStatus = PdhOpenQuery (NULL, 0, &_hQuery);
VERIFY (pdhStatus == ERROR_SUCCESS);
// JF
//char computerName[MAX_COMPUTERNAME_LENGTH + 1];
//LPDWORD lpnSize = (unsigned long*)(MAX_COMPUTERNAME_LENGTH + 1);
//GetComputerName(computerName, lpnSize);
RbCString path = "\\\\";
//path += "IPROCESSOR8";
path += "\\Processor(0)\\% Processor Time";
// définition des compteurs a insérer dans la requete
pdhStatus = PdhAddCounter (_hQuery, path, 0, &_pCounterProcessorTime);
VERIFY (pdhStatus == ERROR_SUCCESS);
Marsh Posté le 09-07-2002 à 12:14:08
houla ... desole, mon doigt a fourche, ... j'ai valide sans le vouloir mon msg precedent ...
le PdhAddCounter ne me retourne ERROR_SUCCESS que si je lui demande dans le path : @\\Processor(0)\\% Processor Time";
Si j'insere avant le nom de ma machine, il me retourne la meme erreur que precedemment (PDH_CSTATUS_NO_OBJECT ).
Mais meme dans le cas ou il me retourne ERROR_SUCCESS (avec le path specifie plus haut), ben les PdhGetCounterInfo ou les PdhCollectQueryData ne marchent pas .....
je crois que je vais criser !!!
HELP !!!!!
Marsh Posté le 09-07-2002 à 12:29:25
il sert a quoi le '@' au debut de ton path?
sinon affiche le path une fois que tu l'as remplit pour voir si il est correct!
Ce qui doit s'afficher doit etre exactement comme ce qui suit :
ex: ma machine s'appelle DEV-SERVER
"\\DEV-SERVER\Processor(0)\% Processor Time"
sinon essaie de le mettre en dur dans PdhAddCounter sans passer par la variable path.
Si ca ne marche pas, je ne saurai quoi te dire, c'est vraiment bizarre!!
Marsh Posté le 09-07-2002 à 12:38:07
alors le @ c'etait rien ... dans le code c'etatit bien un "
j'ai bien recupere le nom de ma machine,voici le code exact pour cela :
char computerName [MAX_COMPUTERNAME_LENGTH + 1];
DWORD computerNameLength = MAX_COMPUTERNAME_LENGTH + 1;
GetComputerName(computerName, &computerNameLength);
puis je procede selon tes instructions. Que je rentre en dur le nom de ma machine ou que je le fasse par le code ci-dessus, ca marche pas de toute facon ....
Comme tu dit, c'est vraiment bizarre cette histoire !!!!
Ca marchait sous WIN NT, mais tous ces pb je les rencontre sous XP ... tu as developpe sous quel OS toi ?
Marsh Posté le 09-07-2002 à 12:40:44
bizarre bizarre cette histoire .....
Enfin, merci mille fois encore pour ton aide !!!
Marsh Posté le 09-07-2002 à 13:16:30
As tu essaie d'utiliser un autre compteur genre "Processor(_Total)\% Processor Time" ?
Marsh Posté le 09-07-2002 à 14:00:45
Alors pour info, voila la solution a mon pb :
il fallait recuperer le compteur en FRANCAIS !!!!!!
C'est quoi ce binz ?? Comment on fait pour faire un truc qui marche sur tous les systemes quels que soient leurs langues ???
voila le code qui marche chez moi :
PDH_STATUS pdhStatus;
pdhStatus = PdhOpenQuery (NULL, 0, &_hQuery);
VERIFY (pdhStatus == ERROR_SUCCESS);
char computerName [MAX_COMPUTERNAME_LENGTH + 1];
DWORD computerNameLength = MAX_COMPUTERNAME_LENGTH + 1;
GetComputerName(computerName, &computerNameLength);
CString path = "\\\\";
path += computerName;
path += "\\Processeur(_Total)\\% Temps Processeur";
pdhStatus = PdhAddCounter(_hQuery, path, 0, &_pCounterProcessorTime);
VERIFY (pdhStatus == ERROR_SUCCESS);
pdhStatus = PdhCollectQueryData (_hQuery);
VERIFY (pdhStatus == ERROR_SUCCESS);
Merci beaucoup pour ton aide try58 !!!!!!
Marsh Posté le 09-07-2002 à 15:06:36
ho la la !!!!
je suis en plein sur l'etude du pourquoi du comment ajouter des compteurs dans la langue de l'OS ... et c'est pas la joie !!!
Marsh Posté le 09-07-2002 à 16:35:02
Arf!! moi je suis sur un W2k anglais, je pouvais chercher longtemps !
Pour ton probleme de langue je ne sais pas comment faire parce que moi j'utilise le browser :
http://msdn.microsoft.com/library/ [...] f_9vn7.asp
et ca me sort les noms des compteurs en fonction de la langue
Marsh Posté le 09-07-2002 à 16:40:52
arf ... en fait je connaissais deja cette fonction... mais ca ne peut convenir a mon pb ....
j'ai un bel article dans la MSDN qui pourrais m'aider, mais si je dois tout faire ce qu'il proposent, je deviendrais fou je crois....
Marsh Posté le 05-07-2002 à 13:48:46
Bonjour,
Tout est dans la question ....
je souhaite recuperer le <Processor Time> du processeur et j'utilise pour cela la librairie PDH avec des methodes telles que :
PdhOpenQuery
PdhAddCounter
PdhCollectQueryData
PdhCollectQueryData
...
mais ca veut pas marcher ..... snif !!!
si une ame charitable aurait une idee a me soumettre je prend bien volontier ...
Merci par avance ...