Página principal | Jerarquía de la clase | Lista alfabética | Lista de componentes | Lista de archivos | Miembros de las clases | Archivos de los miembros | Páginas relacionadas

cronometro.C

Ir a la documentación de este archivo.
00001 //===========================================================================
00002 //= cronometro.h                                          Diciembre de 1998 =
00003 //=-------------------------------------------------------------------------=
00004 //= Definiciones de utileria para medicion de tiempos (real y CPU)          =
00005 //=-------------------------------------------------------------------------=
00006 //= ADVERTENCIA: ESTE SOFTWARE NO ESTA CONCEBIDO NI DISENNADO PARA EL USO   =
00007 //= EN EQUIPO DE CONTROL EN LINEA EN ENTORNOS PELIGROSOS QUE REQUIERAN UN   =
00008 //= DESEMPENNO LIBRE DE FALLAS, COMO LA OPERACION DE PLANTAS NUCLEARES,     = 
00009 //= SISTEMAS DE NAVEGACION O COMUNICACION EN AVIONES, TRAFICO AEREO,        =
00010 //= EQUIPO MEDICO DEL CUAL DEPENDAN VIDAS HUMANAS O SISTEMAS DE ARMAMENTO,  =
00011 //= EN LOS CUALES UNA FALLA EN EL SOFTWARE PUEDA IMPLICAR DIRECTAMENTE LA   =
00012 //= MUERTE, DANNOS PERSONALES O DANNOS FISICOS Y/O AMBIENTALES GRAVES       =
00013 //= ("ACTIVIDADES DE ALGO RIESGO").                                         =
00014 //=-------------------------------------------------------------------------=
00015 //= Autor original: Oscar J. Chavarro G.  A.K.A. JEDILINK. Copyright (c),   =
00016 //= 1997 - 2003, oscarchavarro@hotmail.com                                  =
00017 //= AQUYNZA es software libre, y se rige bajo los terminos de la licencia   =
00018 //= LGPL de GNU (http://www.gnu.org). Para mayor informacion respecto a la  =
00019 //= licencia de uso, consulte el archivo ./doc/LICENCIA en la distribucion. =
00020 //===========================================================================
00021 
00022 #include "toolkits/util/cronometro.h"
00023 
00024 CRONOMETRO::CRONOMETRO()
00025 {
00026     real_dsec = 0;
00027     real_dusec = 0;
00028 
00029     cpu_dsec = 0;
00030     cpu_dusec = 0;
00031 
00032 #ifdef UNIX_ENABLED
00033 //    timerclear(&antes_real);
00034 //    timerclear(&despues_real);
00035 #endif
00036 
00037 #if PLATAFORMA == i386_WIN32_VC
00038         antes_real = 0;
00039         despues_real = 0;
00040 #endif
00041 
00042 }
00043 
00044 void
00045 CRONOMETRO::calcular_delta_real(long sec_antes, long usec_antes, 
00046                   long sec_despues, long usec_despues)
00047 {
00048 #ifdef UNIX_ENABLED
00049         real_dsec = sec_despues - sec_antes - 1;
00050     real_dusec = (1000000L - usec_antes) + usec_despues;
00051     if ( real_dusec > 1000000L ) {
00052         real_dsec += (long)(((double)real_dusec)/1000000);
00053         real_dsec %= 1000000L;
00054         real_dsec--;
00055     }
00056 #endif
00057 }
00058 
00059 void
00060 CRONOMETRO::calcular_delta_cpu(long sec_antes, long usec_antes, 
00061                   long sec_despues, long usec_despues)
00062 {
00063     cpu_dsec = sec_despues - sec_antes - 1;
00064     cpu_dusec = (1000000L - usec_antes) + usec_despues;
00065     if ( cpu_dusec > 1000000L ) {
00066         cpu_dsec += cpu_dusec/1000000L;
00067         cpu_dsec %= 1000000L;
00068         cpu_dsec--;
00069     }
00070 }
00071 
00072 void
00073 CRONOMETRO::restart(void)
00074 {
00075 #ifdef UNIX_ENABLED
00076     gettimeofday(&antes_real, (struct timezone *)NULL);
00077     getrusage(RUSAGE_SELF, &antes_recursos);
00078 #endif
00079 #if PLATAFORMA==i386_WIN32_VC
00080         antes_real = GetTickCount();
00081 #endif
00082 }
00083 
00084 void
00085 CRONOMETRO::update(void)
00086 {
00087 #ifdef UNIX_ENABLED
00088     gettimeofday(&despues_real, (struct timezone *)NULL);
00089     getrusage(RUSAGE_SELF, &despues_recursos);
00090     calcular_delta_real(antes_real.tv_sec, antes_real.tv_usec,
00091                         despues_real.tv_sec, despues_real.tv_usec);
00092     calcular_delta_cpu(antes_recursos.ru_utime.tv_sec, 
00093                        antes_recursos.ru_utime.tv_usec,
00094                        despues_recursos.ru_utime.tv_sec, 
00095                        despues_recursos.ru_utime.tv_usec);
00096 #endif
00097 
00098 #if PLATAFORMA==i386_WIN32_VC
00099         despues_real = GetTickCount();
00100         real_dsec = (long)(despues_real - antes_real);
00101 #endif
00102 }
00103 
00104 double
00105 CRONOMETRO::segundos_reales(void)
00106 {
00107 #ifdef UNIX_ENABLED
00108     return (double)real_dsec + ((double)real_dusec)/1000000;
00109 #endif
00110 #if PLATAFORMA == i386_WIN32_VC
00111         return (double)(real_dsec) / 1000;
00112 #endif
00113 }
00114 
00115 double
00116 CRONOMETRO::segundos_cpu(void)
00117 {
00118     return (double)cpu_dsec + ((double)cpu_dusec)/1000000;
00119 }
00120 
00121 
00122 //===========================================================================
00123 //= EOF                                                                     =
00124 //===========================================================================
00125 

Este archivo HTML ha sido generado automáticamente a partir del código fuente AQUYNZA. NO LO EDITE. Para mayor información contacte al autor.