TAUX D'OCCUPATION DU PROCESSEUR

fabiin Messages postés 329 Date d'inscription mercredi 4 avril 2001 Statut Membre Dernière intervention 8 décembre 2009 - 3 mai 2003 à 09:57
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 - 4 mai 2008 à 11:28
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/12521-taux-d-occupation-du-processeur

ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
4 mai 2008 à 11:28
Le problème vient en fait de la valeur attribuée à la constante SystemProcessorPerformanceInformation lorsque l'on a affaire à plusieurs processeurs.

Si (comme ici) on a :
SystemProcessorPerformanceInformation = $2;
Alors :
* Processeur unique : Les données renvoyées concernent l'occupation processeur totale.
* Processeurs multiples : Les données renvoyées concernent l'application seule.

Mais si l'on a :
SystemProcessorPerformanceInformation = $8;
Alors :
* Processeur unique : Les données renvoyées concernent l'occupation processeur totale (c'est à dire la même chose que précdemment avec la constante réglée à $2 !)
* Processeurs multiples : Les données renvoyées sont sous forme d'un array contenant les informations séparées de tous les processeurs installés (l'emploi du code ici présent ne renvoie donc QUE l'utilisation du PREMIER processeur)

D'après MSDN (http://msdn.microsoft.com/en-us/library/ms724509.aspx) :
"NtQuerySystemInformation may be altered or unavailable in future versions of Windows. Applications should use alternate functions"

Il est maintenant conseillé d'utiliser la fonction GetSystemTimes.
Plus d'infos sur cette fonction :
http://msdn.microsoft.com/en-us/library/ms724400(VS.85).aspx
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
4 mai 2008 à 11:21
Le problème vient en fait de la valeur attribuée à la constante SystemProcessorPerformanceInformation lorsque l'on a affaire à plusieurs processeurs.

Si (comme ici) on a :
SystemProcessorPerformanceInformation = $2;
Alors :
* Processeur unique : Les données renvoyées concernent l'occupation processeur totale.
* Processeurs multiples : Les données renvoyées concernent l'application seule.

Mais si l'on a :
SystemProcessorPerformanceInformation = $8;
Alors :
* Processeur unique : Les données renvoyées concernent l'occupation processeur totale (c'est à dire la même chose que précdemment avec la constante réglée à $2 !)
* Processeurs multiples : Les données renvoyées sont sous forme d'un array contenant les informations séparées de tous les processeurs installés (l'emploi du code ici présent ne renvoie donc QUE l'utilisation du PREMIER processeur)

D'après MSDN (http://msdn.microsoft.com/en-us/library/ms724509.aspx) :
"NtQuerySystemInformation may be altered or unavailable in future versions of Windows. Applications should use alternate functions"

Il est maintenant conseillé d'utiliser la fonction GetSystemTimes.
Plus d'infos sur cette fonction :
http://msdn.microsoft.com/en-us/library/ms724400(VS.85).aspx
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
4 mai 2008 à 10:23
Après de plus amples tests, il semble que la différence apparaisse également entre plusieurs versions de Windows XP...

Qui sait exactement ce que renvoie ce code?
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
3 mai 2008 à 16:56
A noter quelque-chose d'important :
Ce code exécuté sous Windows XP ou antérieur (en tout cas tout ce qui n'est pas Vista mais qui reste compatible, je pense notamment à Windows 2000 etc...) renvoie le taux d'occupation GLOBAL du processeur, alors que le même code exécuté sous Windows Vista renvoie le taux d'occupation processeur de l'application SEULE.

Ce n'est pas du tout la même chose ! Pensez-y lorsque vous l'utilisez...
cs_Nono40 Messages postés 962 Date d'inscription mercredi 3 avril 2002 Statut Membre Dernière intervention 12 septembre 2006 2
3 mai 2003 à 20:11
C'est quand DiffTotal est nul, il faudrait que je rajoute un test. Sinon il faudrait augmenter la durée du timer pour avoir un calcul plus juste.
fabiin Messages postés 329 Date d'inscription mercredi 4 avril 2001 Statut Membre Dernière intervention 8 décembre 2009 6
3 mai 2003 à 13:43
sinon, g aussi oublier de dire un truk :
des fois, je c pas kel est la cause,
y'a l'erreur suivante ki survient sur la ligne
Occupe := 100-DiffIdle/DiffTotal*100;
"invalide float operation"
notemment kan je descent en dessous de 100ms...
fabiin Messages postés 329 Date d'inscription mercredi 4 avril 2001 Statut Membre Dernière intervention 8 décembre 2009 6
3 mai 2003 à 13:37
Salut, j'ai aussi mi 100ms
En faite, ca va aps de 10 en 10 tous le temps,...Le plus souvent oui, mais sinon y'a aussi des valeurs autres ki sotn affichés,... :)
cs_Nono40 Messages postés 962 Date d'inscription mercredi 3 avril 2002 Statut Membre Dernière intervention 12 septembre 2006 2
3 mai 2003 à 12:24
Bizarre, chez moi c'est nickel...
Quelle valeur as-tu mis dans le Timer ? ( j'ai mis 100 ms ). Si tu ne pets que 10ms, la valeur risque d'aller de 10 en 10. A mon avis il ne faut pas descendre en dessous de 100ms.
fabiin Messages postés 329 Date d'inscription mercredi 4 avril 2001 Statut Membre Dernière intervention 8 décembre 2009 6
3 mai 2003 à 09:57
Symap !
Marche pas si mal.
par contre chez moi le taux d'occupation ne va que de 10 en 10... c pas très précis ...
Rejoignez-nous