2009-10-02 9 views
1

Existe-t-il un moyen de récupérer le chargement du processeur système dans Windows XP via un appel DLL ou d'autres moyens. Je voudrais intégrer l'appel dans mon programme et quand la charge de processeur atteint 100% j'aimerais capturer l'heure. Mon programme est la charge maximum de cpu tous les deux jours, et je voudrais savoir exactement quand je peux faire un vidage de données et analyser les données.Surveiller la charge du processeur sous XP par programmation

Merci!

Répondre

1

Vous pouvez utiliser des compteurs de performance.

Voir "Using the PDH Functions to Consume Counter Data"

Le compteur spécifique que vous devez utiliser est temps processeur:

temps processeur est le pourcentage de temps que le processeur exécute un thread actif. Ce compteur a été conçu comme un indicateur principal de l'activité du processeur. Il est calculé en mesurant le temps que le processeur passe à exécuter le thread du processus Idle - dans chaque intervalle d'échantillonnage et en soustrayant cette valeur de 100%. (Chaque processeur a un thread inactif qui consomme des cycles quand aucun autre thread n'est prêt à fonctionner). Il peut être considéré comme le pourcentage de l'intervalle d'échantillonnage passé à faire un travail utile. Ce compteur affiche le pourcentage moyen de temps occupé observé pendant l'intervalle d'échantillonnage. Il est calculé en surveillant l'heure à laquelle le service était inactif, puis en soustrayant cette valeur de 100%.

#define _PROCESSOR_COUNTER _T("\\Processor(0)\\% Processor Time") 
0

NtQuerySystemInformation() semble pertinent, mais semble être (semi-) déconseillé/interne, et non recommandé pour l'utilisation. Il liste des suggestions d'autres fonctions à utiliser. Parmi ceux-ci, il semble que GetSystemTimes() devrait être utile, si vous l'exécutez deux fois avec un retard connu entre.

0

Apparemment, vous ne se soucient que quand/si votre programme utilise 100% de la CPU. Pour que cela fonctionne dans le cadre du même processus, vous devez exécuter le code moinitoring dans un thread séparé avec une priorité élevée (il s'exécutera donc même si le reste du programme consomme 100% du processeur). Il passera le plus clair de son temps à dormir, mais appellera périodiquement GetProcessTimes(), pour savoir combien de temps processeur son processus consomme.

Questions connexes