Taux d'occupation du processeur Centrino Duo

Résolu
Abadianet Messages postés 40 Date d'inscription mercredi 2 novembre 2005 Statut Membre Dernière intervention 19 juin 2006 - 22 avril 2006 à 16:06
jace1975 Messages postés 81 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 12 octobre 2007 - 26 avril 2006 à 00:24
J'utilise la fonction ci-dessous pour calculer le pourcentage d’occupation du processeur
Su une machine classique, le résultat est conforme au taux d’occupation, mais la fonction retourne une valeur quasi nulle sur une machine équipée d’un processeur Centrino Duo – Ah les double-cœur !

Existe-il un remède ?

function ValeurOccupationProcesseur: double;
{ Cette fonction retourne le taux d'occupation du processeur }
var Info: TSYSTEM_PROCESSOR_PERFORMANCE_INFORMATION;
Long: Cardinal;
TickTotal, TickIdle, DiffTotal, DiffIdle: Integer;
begin
NtQuerySystemInformation($2,@Info,SizeOf(Info),Long);
TickIdle := Info.IdleTime Div 10000;
TickTotal := GetTickCount;
DiffIdle := TickIdle - MemTickIdle;
DiffTotal := max(TickTotal - MemTickTotal, 1);
result := 100 - DiffIdle / DiffTotal * 100;
If result < 0 Then
result := 0;
MemTickIdle := TickIdle;
MemTickTotal := TickTotal;
end;

avec

function NtQuerySystemInformation(SystemInfoClass: Integer; Info: Pointer; InfoLength: Cardinal; var ReturnLength: Cardinal): Integer; StdCall; External 'NTDLL.DLL' Name 'NtQuerySystemInformation';

A votre bon coeur

Abadiane

2 réponses

jace1975 Messages postés 81 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 12 octobre 2007 1
26 avril 2006 à 00:24
salut,

je te conseillerai de tester via pdh.dll (ne marche pas avec W95 et W98). dans la documentation, il est en effet écrit que les stats processeurs supportent le dual core,etc...

tu trouveras sur le site un exemple d'utilisation de cette dll, mais si moi je l'utilise un peu différemment, mais qui devrait te satisfaire.
3
Abadianet Messages postés 40 Date d'inscription mercredi 2 novembre 2005 Statut Membre Dernière intervention 19 juin 2006 1
22 avril 2006 à 16:07
J'utilise la fonction ci-dessous pour calculer le pourcentage d’occupation du processeur
Su une machine classique, le résultat est conforme au taux d’occupation, mais la fonction retourne une valeur quasi nulle sur une machine équipée d’un processeur Centrino Duo – Ah les double-cœur !

Existe-il un remède ?

function ValeurOccupationProcesseur: double;
{ Cette fonction retourne le taux d'occupation du processeur }
var Info: TSYSTEM_PROCESSOR_PERFORMANCE_INFORMATION;
Long: Cardinal;
TickTotal, TickIdle, DiffTotal, DiffIdle: Integer;
begin
NtQuerySystemInformation($2,@Info,SizeOf(Info),Long);
TickIdle := Info.IdleTime Div 10000;
TickTotal := GetTickCount;
DiffIdle := TickIdle - MemTickIdle;
DiffTotal := max(TickTotal - MemTickTotal, 1);
result := 100 - DiffIdle / DiffTotal * 100;
If result < 0 Then
result := 0;
MemTickIdle := TickIdle;
MemTickTotal := TickTotal;
end;

avec

function NtQuerySystemInformation(SystemInfoClass: Integer; Info: Pointer; InfoLength: Cardinal; var ReturnLength: Cardinal): Integer; StdCall; External 'NTDLL.DLL' Name 'NtQuerySystemInformation';

A votre bon coeur

Abadiane
0