00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
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
00034
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
00124
00125