version 1.33, 2011/09/26 15:57:10
|
version 1.37, 2011/10/14 09:02:16
|
Line 40
|
Line 40
|
void * |
void * |
fusible(void *argument) |
fusible(void *argument) |
{ |
{ |
# ifndef OS2 |
|
|
|
real8 temps_cpu_precedent; |
real8 temps_cpu_precedent; |
real8 temps_cpu_courant; |
real8 temps_cpu_courant; |
|
|
struct_processus *s_etat_processus; |
struct_processus *s_etat_processus; |
|
|
|
# ifndef OS2 |
struct rusage s_rusage; |
struct rusage s_rusage; |
|
# else |
|
clock_t horloge; |
|
# endif |
|
|
struct timespec temporisation; |
struct timespec temporisation; |
|
|
Line 75 fusible(void *argument)
|
Line 77 fusible(void *argument)
|
temporisation.tv_sec = 0; |
temporisation.tv_sec = 0; |
temporisation.tv_nsec = 100000000; // un dixième de seconde |
temporisation.tv_nsec = 100000000; // un dixième de seconde |
|
|
|
// Par défaut, le thread peut être annulé. |
|
|
|
# ifdef PTHREAD_CANCEL_ENABLE |
pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL); |
pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL); |
|
# endif |
|
|
getrusage(RUSAGE_SELF, &s_rusage); |
# ifndef OS2 |
temps_cpu_courant = s_rusage.ru_utime.tv_sec + |
getrusage(RUSAGE_SELF, &s_rusage); |
(((real8) s_rusage.ru_utime.tv_usec) / ((real8) 1E6)); |
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 |
do |
{ |
{ |
pthread_testcancel(); |
pthread_testcancel(); |
nanosleep(&temporisation, NULL); |
nanosleep(&temporisation, NULL); |
getrusage(RUSAGE_SELF, &s_rusage); |
|
|
|
temps_cpu_precedent = temps_cpu_courant; |
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 - |
(*s_etat_processus).temps_maximal_cpu -= temps_cpu_courant - |
temps_cpu_precedent; |
temps_cpu_precedent; |
Line 121 fusible(void *argument)
|
Line 143 fusible(void *argument)
|
fflush(stdout); |
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); |
pthread_exit(NULL); |
} |
} |
|
|