--- rpl/src/analyse.c 2011/10/10 10:58:12 1.60 +++ rpl/src/analyse.c 2012/05/21 17:25:40 1.71 @@ -1,7 +1,7 @@ /* ================================================================================ - RPL/2 (R) version 4.1.4 - Copyright (C) 1989-2011 Dr. BERTRAND Joël + RPL/2 (R) version 4.1.9 + Copyright (C) 1989-2012 Dr. BERTRAND Joël This file is part of RPL/2. @@ -487,6 +487,7 @@ initialisation_instructions(struct_proce INSTRUCTION("PMAX", instruction_pmax); INSTRUCTION("PMIN", instruction_pmin); INSTRUCTION("POKE", instruction_poke); + INSTRUCTION("POLL", instruction_poll); INSTRUCTION("PPAR", instruction_ppar); INSTRUCTION("PRMD", instruction_prmd); INSTRUCTION("PRST", instruction_prst); @@ -676,6 +677,7 @@ initialisation_instructions(struct_proce INSTRUCTION("PSDEV", instruction_psdev); INSTRUCTION("PURGE", instruction_purge); INSTRUCTION("RDATE", instruction_rdate); + INSTRUCTION("REGEX", instruction_regex); INSTRUCTION("RELAX", instruction_relax); INSTRUCTION("RFUSE", instruction_rfuse); INSTRUCTION("RSTOP", instruction_rstop); @@ -823,6 +825,7 @@ initialisation_instructions(struct_proce INSTRUCTION("PROTECT", instruction_protect); INSTRUCTION("PSHPRFL", instruction_pshprfl); INSTRUCTION("PULPRFL", instruction_pulprfl); + INSTRUCTION("RESTART", instruction_restart); INSTRUCTION("REVLIST", instruction_revlist); INSTRUCTION("SCATTER", instruction_scatter); INSTRUCTION("SUSPEND", instruction_suspend); @@ -965,8 +968,13 @@ analyse(struct_processus *s_etat_process static struct timeval horodatage_initial; struct timeval horodatage_final; +# ifndef OS2 static struct rusage usage_initial; struct rusage usage_final; +# else + static clock_t usage_initial; + clock_t usage_final; +# endif struct timespec temporisation; @@ -1156,10 +1164,14 @@ analyse(struct_processus *s_etat_process -------------------------------------------------------------------------------- */ -# ifndef OS2 if ((*s_etat_processus).pourcentage_maximal_cpu < 100) { +# ifndef OS2 getrusage(RUSAGE_SELF, &usage_final); +# else + usage_final = clock(); +# endif + gettimeofday(&horodatage_final, NULL); if (initialisation == d_vrai) @@ -1169,8 +1181,12 @@ analyse(struct_processus *s_etat_process (((real8) (horodatage_final.tv_usec - horodatage_initial.tv_usec)) / ((real8) 1E6)); + // Le temps depuis la dernière limitation est de plus de un + // dixième de seconde. + if (temps_reel >= 0.1) { +# ifndef OS2 temps_cpu = ((real8) ((usage_final.ru_utime.tv_sec + usage_final.ru_stime.tv_sec) - (usage_initial.ru_utime.tv_sec + @@ -1179,6 +1195,9 @@ analyse(struct_processus *s_etat_process usage_final.ru_stime.tv_usec) - (usage_initial.ru_utime.tv_usec + usage_initial.ru_stime.tv_usec))) / ((real8) 1E6)); +# else + temps_cpu = (usage_final - usage_initial) / CLOCKS_PER_SEC; +# endif pourcentage = 100 * temps_cpu / temps_reel; @@ -1197,7 +1216,13 @@ analyse(struct_processus *s_etat_process temporisation.tv_nsec = (attente - temporisation.tv_sec) * 1E9; - nanosleep(&temporisation, NULL); + while(nanosleep(&temporisation, &temporisation) == -1) + { + if (errno != EINTR) + { + break; + } + } } horodatage_initial = horodatage_final; @@ -1212,7 +1237,10 @@ analyse(struct_processus *s_etat_process usage_initial = usage_final; } } -# endif + else + { + initialisation = d_faux; + } /* --------------------------------------------------------------------------------