--- rpl/src/fusible.c 2011/10/10 16:39:00 1.35 +++ rpl/src/fusible.c 2011/10/14 08:13:05 1.36 @@ -47,7 +47,11 @@ fusible(void *argument) struct_processus *s_etat_processus; +# ifndef OS2 struct rusage s_rusage; +# else + clock_t horloge; +# endif struct timespec temporisation; @@ -81,19 +85,35 @@ fusible(void *argument) pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL); # endif - getrusage(RUSAGE_SELF, &s_rusage); - temps_cpu_courant = s_rusage.ru_utime.tv_sec + - (((real8) s_rusage.ru_utime.tv_usec) / ((real8) 1E6)); +# ifndef OS2 + getrusage(RUSAGE_SELF, &s_rusage); + temps_cpu_courant = s_rusage.ru_utime.tv_sec + + (((real8) s_rusage.ru_utime.tv_usec) / ((real8) 1E6)); +# else + horloge = clock(); + temps_cpu_courant = horloge / CLOCKS_PER_SEC; +# endif do { pthread_testcancel(); nanosleep(&temporisation, NULL); - getrusage(RUSAGE_SELF, &s_rusage); - temps_cpu_precedent = temps_cpu_courant; - temps_cpu_courant = s_rusage.ru_utime.tv_sec + - (((real8) s_rusage.ru_utime.tv_usec) / ((real8) 1E6)); + +# ifndef OS2 + getrusage(RUSAGE_SELF, &s_rusage); + temps_cpu_courant = s_rusage.ru_utime.tv_sec + + (((real8) s_rusage.ru_utime.tv_usec) / ((real8) 1E6)); +# else + horloge = clock(); + temps_cpu_courant = horloge / CLOCKS_PER_SEC; + + if (temps_cpu_courant < temps_cpu_precedent) + { + // Le compteur a fait un tour... + temps_cpu_precedent = temps_cpu_courant; + } +# endif (*s_etat_processus).temps_maximal_cpu -= temps_cpu_courant - temps_cpu_precedent; @@ -125,22 +145,6 @@ fusible(void *argument) fflush(stdout); } -# else - - struct_processus *s_etat_processus; - - s_etat_processus = argument; - - if ((*s_etat_processus).langue == 'F') - { - printf("+++Attention : Support indisponible sous OS/2\n"); - } - else - { - printf("+++Warning : Function unavailable\n"); - } -# endif - pthread_exit(NULL); }