fabiin
Messages postés329Date d'inscriptionmercredi 4 avril 2001StatutMembreDernière intervention 8 décembre 2009
-
3 mai 2003 à 09:57
ni69
Messages postés1418Date d'inscriptionsamedi 12 juin 2004StatutMembreDerniè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.
ni69
Messages postés1418Date d'inscriptionsamedi 12 juin 2004StatutMembreDernière intervention 5 juillet 201012 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)
ni69
Messages postés1418Date d'inscriptionsamedi 12 juin 2004StatutMembreDernière intervention 5 juillet 201012 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)
ni69
Messages postés1418Date d'inscriptionsamedi 12 juin 2004StatutMembreDernière intervention 5 juillet 201012 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és1418Date d'inscriptionsamedi 12 juin 2004StatutMembreDernière intervention 5 juillet 201012 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és962Date d'inscriptionmercredi 3 avril 2002StatutMembreDernière intervention12 septembre 20062 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és329Date d'inscriptionmercredi 4 avril 2001StatutMembreDernière intervention 8 décembre 20096 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és329Date d'inscriptionmercredi 4 avril 2001StatutMembreDernière intervention 8 décembre 20096 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és962Date d'inscriptionmercredi 3 avril 2002StatutMembreDernière intervention12 septembre 20062 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és329Date d'inscriptionmercredi 4 avril 2001StatutMembreDernière intervention 8 décembre 20096 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 ...
4 mai 2008 à 11:28
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
4 mai 2008 à 11:21
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
4 mai 2008 à 10:23
Qui sait exactement ce que renvoie ce code?
3 mai 2008 à 16:56
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...
3 mai 2003 à 20:11
3 mai 2003 à 13:43
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...
3 mai 2003 à 13:37
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,... :)
3 mai 2003 à 12:24
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.
3 mai 2003 à 09:57
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 ...