junior31490
Messages postés24Date d'inscriptionvendredi 28 juillet 2006StatutMembreDernière intervention15 avril 2008
-
7 nov. 2007 à 11:29
junior31490
Messages postés24Date d'inscriptionvendredi 28 juillet 2006StatutMembreDernière intervention15 avril 2008
-
8 nov. 2007 à 12:03
Bonjour
J'ai un problème, on m'a demandé de créer une petite apllication console permettant d'afficher la charge CPU d'un processus donné en fonction de son PID.
Pour cela, j'ai écris un petit bout de code, mais il me renvoit des valeurs totalement incohérente.
// Declaration variables
HANDLE hProcess;
FILETIME createTime;
FILETIME exitTime;
FILETIME kernelTime;
FILETIME userTime;
SYSTEMTIME st;
int bStatus;
int pid = 2896;//PID du processus désiré
long div1;
long div2;
long div;
long test;
long test1;
long test2;
long test3;
while(1)
{
junior31490
Messages postés24Date d'inscriptionvendredi 28 juillet 2006StatutMembreDernière intervention15 avril 2008 7 nov. 2007 à 13:12
En faite, j'ai fait ce calcul car je ne sais pas comment transformé FILETIME en type que je puisse exploiter simplement.
Je connais la solution:
typedef unsigned long long int uint64;
GetProcessTimes(hProcess, &createTime, &exitTime, &kernelTime, &userTime);
uint64 lKernel = (kernelTime.dwHighDateTime << 32) | (kernelTime.dwLowDateTime);
uint64 lUser = (userTime.dwHighDateTime << 32) | (userTime.dwLowDateTime);
uint64 lCreate = (createTime.dwHighDateTime << 32) | (createTime.dwLowDateTime);
SYSTEMTIME lCurrentSystemTime;
FILETIME lCurrentFileTime;
GetSystemTime(&lCurrentSystemTime);
SystemTimeToFileTime(&lCurrentSystemTime, &lCurrentFileTime);
float lCpu = (lKernel + lUser) / (10 * (lCurrentFileTime - lCreate));
Mais elle ne marche pas. Donc j'ai essayé de transformer un temps en entier (mais à priori ce n'est pas bon).
junior31490
Messages postés24Date d'inscriptionvendredi 28 juillet 2006StatutMembreDernière intervention15 avril 2008 8 nov. 2007 à 09:00
Il ne me prend pas cette ligne : "typedef unsigned long long int uint64;"
Il me dit: "error C2632: 'long' followed by 'long' is illegal"
Je pense que c'est parce que je n'ai pas de librairie 64 bits.
Tu vois comment je pourrais faire?
system("cls");
printf("%ld\n", lCpu);
Sleep(100);
}
CloseHandle(hProcess);
}
Est ce que vous voyez une incohérence?
Ce code compile mais marque vraiment n'importe quoi, même des choses négatives alors que c'est un unsigned.
Merci de m'aider
junior31490
Messages postés24Date d'inscriptionvendredi 28 juillet 2006StatutMembreDernière intervention15 avril 2008 8 nov. 2007 à 10:17
si je met ce ue m'a donné luhtor pour le calcul du pourcentage(cad : "double lCpu double(lKernel + lUser) / double(lCurrent - lCreate);" à la place de "double lCpu double(kernelTime.dwLowDateTime + userTime.dwLowDateTime) / double(lCurrentFileTime.dwLowDateTime - createTime.dwLowDateTime);") le compilateur me dit : "error C2520: conversion from unsigned __int64 to double not implemented, use signed __int64" comment puis-je éviter ce pb?
junior31490
Messages postés24Date d'inscriptionvendredi 28 juillet 2006StatutMembreDernière intervention15 avril 2008 8 nov. 2007 à 11:52
ahhhhhhhhhhhhhhhhhhhhhh
ça ne marche tjrs pas
maintenant ça compile nickel, mais ça m'affiche tjrs la même valeur (négative) -1.932740 et pour n'importe quel processus.
si quelqu'un a une idée du pk du comment, je suis preneur...
luhtor
Messages postés2023Date d'inscriptionmardi 24 septembre 2002StatutMembreDernière intervention28 juillet 20086 8 nov. 2007 à 11:52
Bon je plaquarde la fonction fonctionnelle qui calcul la charge instantanée. C'est compilé sous devcpp, j'avais la flemme de créer un projet sous VC. Donc adapte le a VC en remplacant les types:
#include <windows.h>
#include <stdio.h>
int main(int argc, char * argv[])
{
HANDLE hProcess;
int bStatus;
int pid = 3800;
luhtor
Messages postés2023Date d'inscriptionmardi 24 septembre 2002StatutMembreDernière intervention28 juillet 20086 8 nov. 2007 à 11:54
Il manque un petit test de nullité sur le dénominateur: double(lCurrent - lOldCurrent).
Enfin normalement avec le Sleep(1000) il ne devrait pas y avoir de problèmes.