Tetedeiench Head Of God | Bonjour !
j'ai quelques problemes avec getthreadtimes.
Cette fonction permet d'obtenir des stats sur le thread en question.
Elle me sert a monitorer le % CPU utilisé par mon thread.
j'utilise une fonction du type :
Code :
- function Tbenchs.GetTheThreadTimes(PID: integer) : Double;
- var
- lpLocalFileTime : TFileTime;
- lpSystemTime : TSystemTime;
- lpCreationTime,
- lpExitTime,
- lpKernelTime,
- lpUserTime : TFileTime;
- KernelTime,
- UserTime : TDateTime;
- SecRunning,SecCPU : Int64;
- begin
- GetThreadTimes(PID, lpCreationTime, lpExitTime, lpKernelTime,
- lpUserTime);
- FileTimeToLocalFileTime(lpCreationTime, lpLocalFileTime);
- //Get the kernel time and format it
- FileTimeToSystemTime(lpKernelTime, lpSystemTime);
- KernelTime := SystemTimeToDateTime(lpSystemTime);
- //Get the user time and format it
- FileTimeToSystemTime(lpUserTime, lpSystemTime);
- UserTime := SystemTimeToDateTime(lpSystemTime);
- SecCPU := MilliSecondsBetween(TimeOf(Usertime+Kerneltime),0);
- SecRunning := MilliSecondsBetween(TimeOf(Now()),TimeOf(StartTime));
- Result := (SecCPU / SecRunning) * 100.0;
- end;
|
avant de lancer le thread, la ligne juste au dessus, je fais un : StartTime := now();
Ca marche bien.
Mais deux questions suivent :
-Que ce passera t'il apres 24h ? ca va forcément bugguer, nan ? Sans le timeof, j'ai pas réussi a avoir une valeur correcte... une idée ?
-Y a t'il moyen de s'en sortir avec getprocesstimes pour avoir le temps CPU + GUI en meme temps ? si oui, comment ? J'ai déjà essayé d'enregistrer les valeurs de départ et de les soustraire aux valeurs que j'obtenais... sans succès.
Code :
- function Tbenchs.GetTheProcessTimes():Double;
- var
- lpLocalFileTime : TFileTime;
- lpSystemTime : TSystemTime;
- lpCreationTime,
- lpExitTime,
- lpKernelTime,
- lpUserTime : TFileTime;
- PH : THandle;
- KernelTime,
- UserTime : TDateTime;
- SecRunning,SecCPU : Int64;
- begin
- PH := OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, GetCurrentProcessId());
- if PH <> 0 then
- GetProcessTimes(PH, lpCreationTime, lpExitTime, lpKernelTime, lpUserTime);
- FileTimeToLocalFileTime(lpCreationTime, lpLocalFileTime);
- //Get the kernel time and format it
- FileTimeToSystemTime(lpKernelTime, lpSystemTime);
- KernelTime := SystemTimeToDateTime(lpSystemTime);
- KernelTime := KernelTime - StartKernelTime;
- //Get the user time and format it
- FileTimeToSystemTime(lpUserTime, lpSystemTime);
- UserTime := SystemTimeToDateTime(lpSystemTime);
- UserTime := UserTime - StartUserTime;
- SecCPU := MilliSecondsBetween(TimeOf(Usertime+Kerneltime),0);
- SecRunning := MilliSecondsBetween(TimeOf(Now()),TimeOf(StartTime));
- Result := (SecCPU / SecRunning) * 100.0;
- CloseHandle(PH);
- end;
|
des idées ? des précisions ? de l'aide ?  Message édité par Tetedeiench le 24-09-2003 à 21:42:11 ---------------
L'ingénieur chipset nortiaux : Une iFricandelle svp ! "Spa du pâté, hin!" ©®Janfynette | "La plus grosse collec vivante de bans abusifs sur pattes" | OCCT v12 OUT !
|