Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Porcentaje de uso del CPU (https://www.clubdelphi.com/foros/showthread.php?t=33632)

OSKR 12-07-2006 18:26:57

Porcentaje de uso del CPU
 
Aqi está el codigo en Builder, no se si ya alguien lo habia publicado aqi, en otros foros ..o no se....crei ver algo por ahi pero en linux....
Código:

#include <Winbase.h>
#include <stdio.h>
#pragma hdrstop
#pragma argsused
#define _WIN32_WINNT 0x0501
void Error(HANDLE Handle)
{ LPVOID lpMsgBuf;
  FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,NULL,GetLastError(),MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),(LPTSTR) &lpMsgBuf,0,NULL);
  MessageBox( NULL, (char *)lpMsgBuf,"GetLastError", MB_OK|MB_ICONINFORMATION);
  LocalFree( lpMsgBuf );
  FreeLibrary(Handle);
  exit(0);
}

int main(int argc, char* argv[])
{ int i=10;
  bool (*GST)(FILETIME *,FILETIME *,FILETIME *);
  __int64 ITn=0,ITv=0,KTn=0,KTv=0,UTn=0,UTv=0;
  HANDLE Handle=LoadLibrary("kernel32.dll");
  if(!Handle)
    return 1;
  GST=(bool (*)(FILETIME *,FILETIME *,FILETIME *))GetProcAddress(Handle,"GetSystemTimes");
  if(!GST)
    return 1;
  while((--i)!=0)
  { FILETIME  IT,KT,UT;
    try
    { bool res=GST(&IT,&KT,&UT);
      Sleep(1500);
      if(!res)
        Error(Handle);
      memcpy(&UTn,&UT,sizeof(FILETIME));
      memcpy(&ITn,&IT,sizeof(FILETIME));
      memcpy(&KTn,&KT,sizeof(FILETIME));
    }
    catch(Exception &Ex)
    { printf("Puta excepcion en la segunda\n");
    }
    __int64 Deno=((KTn-KTv)+(UTn-UTv));
    if( Deno==0)
      printf("0\n");
    else
      { double Prcntj=((double)Deno-(ITn-ITv))/Deno*100;
        printf("%f\n",Prcntj);
      }
    KTv=KTn;
    UTv=UTn;
    ITv=ITn;
  }
  FreeLibrary(Handle);
  return 0;
}

oooooopppppsss :eek::eek::eek::eek: no puedo creerlo!!! ahora la etiqeta si respeta el tabulado!!!! no puede ser!!!! :eek::eek::eek::eek:.
Una cosita....a veces se tira una excepción sin motivo aparente, no se xq.. si alguien puede y qiere corregirlo.....q lo haga.....esto es oarte de un agente SNMP q se esta haciendo aqi en la Univ. aún estoy pariendo con tomar la temperatura del procesador, ya se como pero por ser WMI se hace casi imposible

dec 12-07-2006 23:58:52

Hola,

No me queda muy claro si lo que pretendías era compartir esas rutinas,... es decir, si no sería mejor que el código fuente (y los comentarios pertinentes) que propones estuviera en el apartado de trucos... ¿o es que hay algún problema y es eso lo que te precupa, la solución? :p

OSKR 13-07-2006 01:23:53

Pues de solución....no se.... la vaina en cuestión funciona...de hecho toma mejores muestras q la del administrador de tareas aunqe yo creo q este ultimo no se deja engañar tan fácil y toma muestras en otros intervalos, por eso ahi se ve mas estable q en el q puse....lo q no entiendo muy bien es xq la funcion q cargo a veces qeda algo así como "invalidada" y era necesario cargar de nuevo el kernel32, lo ignoro, si alguien qiere pues...pongalo en el de trucos..traduzcanlo a delphi tambien si qieren....no hay peo....estoy muy atareado con esa vaina del SNMP y me qeda muy poco tiempo de vida en la universidad, por eso no se les extrañe si de repente ven algun tema no correspondiente al foro donde este publicado :D, es por el apuro....


La franja horaria es GMT +2. Ahora son las 02:43:52.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi