|
| Pourcentage d'utilisation CPU |
| Iniciado por jack31, 29,ene. 2019 10:50 - 5 respuestas |
| |
| | | |
|
| |
Miembro registrado 37 mensajes |
|
| Publicado el 29,enero 2019 - 10:50 |
Bonjour,
Quelqu'un aurait-il une solution pour calculer le pourcentage d'utilisation des processeurs ? Pour info, je tourne sous Windows 10.
J'ai essayé ça, déclenché par un timer toutes les secondes mais les résultats sont totalement incohérents.
typeFILETIME est une structure mentDwLowDateTime est un entier sur 4 mentDwHighDateTime est un entier sur 4 FIN gentIdleAncien est un entier sans signe sur 8 gentKernAncien est un entier sans signe sur 8 gentUserAncien est un entier sans signe sur 8 gbln1ère est un booléen
FONCTION Renvoyer_InfosProcesseurs
lstrFTIdle est un typeFILETIME lstrFTKern est un typeFILETIME lstrFTUser est un typeFILETIME lentIdleActuel est un entier sans signe sur 8 lentIdleDifférence est un entier sans signe sur 8 lentKernActuel est un entier sans signe sur 8 lentKernDifférence est un entier sans signe sur 8 lentUserActuel est un entier sans signe sur 8 lentUserDifférence est un entier sans signe sur 8 lentSystDifférence est un entier sans signe sur 8 lrelCPU est un réel lentRésultat est un entier
lentRésultat = API("KERNEL32","GetSystemTimes",&lstrFTIdle,&lstrFTKern,&lstrFTUser) lentIdleActuel = bitDécaleGauche(lstrFTIdle:mentDwHighDateTime,32) + lstrFTIdle:mentDwLowDateTime lentKernActuel = bitDécaleGauche(lstrFTKern:mentDwHighDateTime,32) + lstrFTKern:mentDwLowDateTime lentUserActuel = bitDécaleGauche(lstrFTUser:mentDwHighDateTime,32) + lstrFTUser:mentDwLowDateTime
SI gbln1ère ALORS lentIdleDifférence = lentIdleActuel - gentIdleAncien lentKernDifférence = lentKernActuel - gentKernAncien lentUserDifférence = lentUserActuel - gentUserAncien lentSystDifférence = lentKernDifférence + lentUserDifférence SI lentSystDifférence > 0 ALORS lrelCPU = ((lentSystDifférence - lentIdleDifférence) * 100 / lentSystDifférence) SINON lrelCPU = 0 FIN Trace(NumériqueVersChaîne(lrelCPU,"3,2f")) FIN
gentIdleAncien = lentIdleActuel gentKernAncien = lentKernActuel gentUserAncien = lentUserActuel gbln1ère = Vrai
Merci d'avance pour votre aide. J@ck |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 1.002 mensajes |
|
| Publicado el 29,enero 2019 - 11:02 |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 37 mensajes |
|
| Publicado el 29,enero 2019 - 11:10 |
Merci Jordan. J'ai effectivement vu la réponse de Philippe Pasquali avant de poster mais je n'utilise pas .NET et je n'y ai donc rien compris... Ca devrait fonctionner avec des APIs de Windows, non ? |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 37 mensajes |
|
| Publicado el 29,enero 2019 - 12:40 |
Re,
En poussant mes recherches un peu plus loin, je m'aperçois que les résultats affichés ne sont pas si faux que cela. En effet, je basais mon affirmation précédente en comparant mon résultat à celui affiché par le moniteur de ressources de Windows (10), or je m'aperçois que le pourcentage d'utilisation affiché par ce dernier dépasse 100% quand je lance plusieurs applications très consommatrices en CPU en parallèle. Tout est question d'interprétation : un pourcentage peut-il être supérieur à 100% ? |
| |
| |
| | | |
|
| | |
| |
| Publicado el 30,enero 2019 - 10:44 |
Voici un bout de code (trouvé sur ce forum) et adapté à mon usage Les résultats sont globalement cohérents
Resultats est un objet Automation dynamique objLocator est un objet Automation "WbemScripting.SWbemLocator" objService est un objet Automation dynamique objService = objLocator>>ConnectServer(".", "root\cimv2") objService>>Security_>>ImpersonationLevel = 3 zProc_Cpu_Load()
PROCÉDURE PRIVÉE zProc_Cpu_Load() // Procédure automatique : // La procédure est exécutée manuellement, lors d'un appel dans le code // Elle sera répétée en boucle, en attendant 1 seconde et 23 centièmes de seconde entre chaque appel // Chaque appel suivant exécute une seule fois la procédure, sans timer
Resultats = objService>>ExecQuery("SELECT LoadPercentage FROM Win32_Processor") SI Resultats>>Count ALORS JAUGE_CPU0=Resultats>>ItemIndex(0)>>Properties_>>Item("LoadPercentage")>>Value SELON JAUGE_CPU0 CAS<10: JAUGE_CPU0..CouleurJauge=nBleuJauge CAS<20: JAUGE_CPU0..CouleurJauge=VertFoncé CAS<30: JAUGE_CPU0..CouleurJauge=OrangeClair CAS<40: JAUGE_CPU0..CouleurJauge=OrangeFoncé AUTRE CAS JAUGE_CPU0..CouleurJauge=RougeClair FIN FIN |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 37 mensajes |
|
| Publicado el 30,enero 2019 - 12:15 |
Merci Benoît, je vais tester ça avec le plus grand intérêt et comparer les résultats à ceux que j'obtiens avec mon code basé sur les APIs de Windows.
 Amicalement, J@ck |
| |
| |
| | | |
|
| | | | |
| | |
|