[C,C++] recuperer les infos du processeur ...

recuperer les infos du processeur ... [C,C++] - C++ - Programmation

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 ...

Reply

Marsh Posté le 05-07-2002 à 13:48:46   

Reply

Marsh Posté le 05-07-2002 à 14:18:58    

:bounce:

Reply

Marsh Posté le 05-07-2002 à 15:02:25    

please !!!!!!!!!!!!!!!!!!!!!!!!
 :(

Reply

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.


---------------
LOVE & PEACE !!! [:kirvel]
Reply

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 !!!

Reply

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 :
  1. PDH_HQUERY hQuery;
  2. PDH_HCOUNTER hCounter;
  3. PdhOpenQuery(0, 0, &hQuery);
  4. PdhAddCounter(hQuery, "\\\\nomdetamachine\\Processor(0)\\%Processor Time", 0, &hCounter);


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 '\'.


---------------
LOVE & PEACE !!! [:kirvel]
Reply

Marsh Posté le 09-07-2002 à 09:45:38    

OK merci beaucoup, je m'en vais appliquer tes conseils !!!

Reply

Marsh Posté le 09-07-2002 à 10:04:24    

de rien !


---------------
LOVE & PEACE !!! [:kirvel]
Reply

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 !

Reply

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!!


---------------
LOVE & PEACE !!! [:kirvel]
Reply

Marsh Posté le 09-07-2002 à 10:38:56   

Reply

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);

Reply

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 !!!!!

Reply

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!!


---------------
LOVE & PEACE !!! [:kirvel]
Reply

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 ?

Reply

Marsh Posté le 09-07-2002 à 12:39:16    

W2000


---------------
LOVE & PEACE !!! [:kirvel]
Reply

Marsh Posté le 09-07-2002 à 12:40:44    

bizarre bizarre cette histoire .....
Enfin, merci mille fois encore pour ton aide !!!

Reply

Marsh Posté le 09-07-2002 à 13:16:30    

As tu essaie d'utiliser un autre compteur genre "Processor(_Total)\% Processor Time" ?


---------------
LOVE & PEACE !!! [:kirvel]
Reply

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 !!!!!!

Reply

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 !!!

Reply

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


---------------
LOVE & PEACE !!! [:kirvel]
Reply

Marsh Posté le 09-07-2002 à 16:37:51    

Ok merci, j'y cours !!
:-)

Reply

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....

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed