Obtenir le temps processeur d'un process


Propriétés du code


Date de création : 02/11/2006 à 23:51:00
2 Commentaire(s)
  violent_ken

 

Présentation


Ce code permet d'obtenir le temps processeur (et accessoirement le temps Kernel et le temps User) d'un processus.

Les valeurs sont retournées par adresse.

Utiliser la procédure comme ceci :


Dim dKernelTime As Double, dUserTime As Double, dProcessorTime As Double
Dim lPID As Long

GetProcTimes lPID, dKernelTime, dUserTime, dProcessorTime

 

Code


'//APIs utilisées
'Permet de fermer un handle
Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
'Permet d'obtenir un handle d'un processus particulier
Public Declare Function OpenProcess Lib "Kernel32.dll" (ByVal dwDesiredAccessas As Long, ByVal bInheritHandle As Long, ByVal dwProcId As Long) As Long
'Permet d'obtenir des infos sur les temps des processus
Private Declare Function GetProcessTimes Lib "kernel32" (ByVal hProcess As Long, lpCreationTime As Currency, _
    lpExitTime As Currency, lpKernelTime As Currency, lpUserTime As Currency) As Long

'//Constantes d'accès aux processus
Public Const PROCESS_QUERY_INFORMATION = 1024
Public Const PROCESS_VM_READ = 16



'----------------------------------------------------
'Permet d'obtenir les temps processeur, temps noyeau et temps utilisateur
'd'un processus en fonction de son PID
'----------------------------------------------------
Public Sub GetProcTimes(ByVal lPID As Long, ByRef KernelTime As Double, ByRef UserTime As Double, ByRef ProcessorTime As Double)

'Le temps processeur (visible dans TaskMgr) est le temps noyau + temps utilisateur

Dim T0 As Currency  'cette variable n'est pas utilisée, mais est nécessaire comme argument de l'API
Dim curTime2 As Currency 'Le temps user qui nous intéresse
Dim curTime As Currency    'Le temps kernel qui nous intéresse
Dim lProcess As Double  'handle du processus
Dim lTime2 As Double 'temps que l'on récupère (user)
Dim lTime As Double 'temps que l'on récupère (kernel)


    'obtient le handle du processus
    lProcess = OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_VM_READ, 0, lPID)
    
    'obtient les temps (T0 ne nous intéresse pas)
    GetProcessTimes lProcess, T0, T0, curTime, curTime2
    
    'Renvoit le temps en secondes
    lTime = curTime / 1000
    lTime2 = curTime2 / 1000
    
    'Ferme le handle ouvert par OpenProcess
    CloseHandle lProcess
    
    'Affecte la valeur de KernelTime et de UserTime
    KernelTime = lTime
    UserTime = lTime2
    
    'Le temps processeur est la somme des temps kernel et user
    ProcessorTime = UserTime + KernelTime
End Sub


 

Historique


Voici l'historique des modifications de ce code :
02/11/2006 : Suppression dun bug daffichage
23/11/2006 : correction du bug daffichage pour les tabulations

 
 

Modifier le code

Seul les admins et l'auteur du code lui même peuvent modifier ce code.

 

Commentaires


De MadMatt le 03/11/2006 à 01:52


Y'a un truc que j'ai pas saisi sur cet api, c'est que ça renvoie le temps processeur d'un process, mais entre quel intervalle ? (entre 2 appel à cet api ?)

 

De violent_ken le 03/11/2006 à 09:54


Oui voilà, c'est çà ; tu appelles cette API et elle te renvoie, au moment de l'appel, le temps que le processus a utilisé depuis son lancement.

C'est comme pour GetTickCount.

 

Ajouter un commentaire


Vous devez être connecté pour pouvoir poster un commentaire.

 
 

Valid HTML 4.01 Transitional Valid CSS

Site web de Vb System Library version 1.3
Developpement et design réalisé par : Matthieu Napoli (MadMatt)
© 2007 Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
Temps d'execution de la page : 0.011 s
www.mnapoli.fr