Diff for /rpl/src/analyse.c between versions 1.60 and 1.75

version 1.60, 2011/10/10 10:58:12 version 1.75, 2012/10/01 11:04:57
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.1.4    RPL/2 (R) version 4.1.11
   Copyright (C) 1989-2011 Dr. BERTRAND Joël    Copyright (C) 1989-2012 Dr. BERTRAND Joël
   
   This file is part of RPL/2.    This file is part of RPL/2.
   
Line 487  initialisation_instructions(struct_proce Line 487  initialisation_instructions(struct_proce
     INSTRUCTION("PMAX", instruction_pmax);      INSTRUCTION("PMAX", instruction_pmax);
     INSTRUCTION("PMIN", instruction_pmin);      INSTRUCTION("PMIN", instruction_pmin);
     INSTRUCTION("POKE", instruction_poke);      INSTRUCTION("POKE", instruction_poke);
       INSTRUCTION("POLL", instruction_poll);
     INSTRUCTION("PPAR", instruction_ppar);      INSTRUCTION("PPAR", instruction_ppar);
     INSTRUCTION("PRMD", instruction_prmd);      INSTRUCTION("PRMD", instruction_prmd);
     INSTRUCTION("PRST", instruction_prst);      INSTRUCTION("PRST", instruction_prst);
Line 676  initialisation_instructions(struct_proce Line 677  initialisation_instructions(struct_proce
     INSTRUCTION("PSDEV", instruction_psdev);      INSTRUCTION("PSDEV", instruction_psdev);
     INSTRUCTION("PURGE", instruction_purge);      INSTRUCTION("PURGE", instruction_purge);
     INSTRUCTION("RDATE", instruction_rdate);      INSTRUCTION("RDATE", instruction_rdate);
       INSTRUCTION("REGEX", instruction_regex);
     INSTRUCTION("RELAX", instruction_relax);      INSTRUCTION("RELAX", instruction_relax);
     INSTRUCTION("RFUSE", instruction_rfuse);      INSTRUCTION("RFUSE", instruction_rfuse);
     INSTRUCTION("RSTOP", instruction_rstop);      INSTRUCTION("RSTOP", instruction_rstop);
Line 755  initialisation_instructions(struct_proce Line 757  initialisation_instructions(struct_proce
     //DOLIST      //DOLIST
     //=> { 29 42 57 }      //=> { 29 42 57 }
     INSTRUCTION("ELSEIF", instruction_elseif);      INSTRUCTION("ELSEIF", instruction_elseif);
       INSTRUCTION("FORALL", instruction_forall);
     INSTRUCTION("FORMAT", instruction_format);      INSTRUCTION("FORMAT", instruction_format);
     //INSTRUCTION("HEIGHT")      //INSTRUCTION("HEIGHT")
     INSTRUCTION("ITRACE", instruction_itrace);      INSTRUCTION("ITRACE", instruction_itrace);
Line 823  initialisation_instructions(struct_proce Line 826  initialisation_instructions(struct_proce
     INSTRUCTION("PROTECT", instruction_protect);      INSTRUCTION("PROTECT", instruction_protect);
     INSTRUCTION("PSHPRFL", instruction_pshprfl);      INSTRUCTION("PSHPRFL", instruction_pshprfl);
     INSTRUCTION("PULPRFL", instruction_pulprfl);      INSTRUCTION("PULPRFL", instruction_pulprfl);
       INSTRUCTION("RESTART", instruction_restart);
     INSTRUCTION("REVLIST", instruction_revlist);      INSTRUCTION("REVLIST", instruction_revlist);
     INSTRUCTION("SCATTER", instruction_scatter);      INSTRUCTION("SCATTER", instruction_scatter);
     INSTRUCTION("SUSPEND", instruction_suspend);      INSTRUCTION("SUSPEND", instruction_suspend);
Line 837  initialisation_instructions(struct_proce Line 841  initialisation_instructions(struct_proce
     INSTRUCTION("CLRCNTXT", instruction_clrcntxt);      INSTRUCTION("CLRCNTXT", instruction_clrcntxt);
     INSTRUCTION("CLRSMPHR", instruction_clrsmphr);      INSTRUCTION("CLRSMPHR", instruction_clrsmphr);
     INSTRUCTION("CONTINUE", instruction_continue);      INSTRUCTION("CONTINUE", instruction_continue);
       INSTRUCTION("CRITICAL", instruction_critical);
     INSTRUCTION("DUPCNTXT", instruction_dupcntxt);      INSTRUCTION("DUPCNTXT", instruction_dupcntxt);
     INSTRUCTION("FUNCTION", instruction_function);      INSTRUCTION("FUNCTION", instruction_function);
     INSTRUCTION("IMPLICIT", instruction_implicit);      INSTRUCTION("IMPLICIT", instruction_implicit);
Line 965  analyse(struct_processus *s_etat_process Line 970  analyse(struct_processus *s_etat_process
     static struct timeval           horodatage_initial;      static struct timeval           horodatage_initial;
     struct timeval                  horodatage_final;      struct timeval                  horodatage_final;
   
   #   ifndef OS2
     static struct rusage            usage_initial;      static struct rusage            usage_initial;
     struct rusage                   usage_final;      struct rusage                   usage_final;
   #   else
       static clock_t                  usage_initial;
       clock_t                         usage_final;
   #   endif
   
     struct timespec                 temporisation;      struct timespec                 temporisation;
   
Line 1013  analyse(struct_processus *s_etat_process Line 1023  analyse(struct_processus *s_etat_process
         }          }
     }      }
   
       /*
        * Verrou pour les sections_critiques
        */
   
       if (pthread_mutex_lock(&mutex_sections_critiques) != 0)
       {
           (*s_etat_processus).erreur_systeme = d_es_processus;
           return;
       }
   
       if (pthread_mutex_unlock(&mutex_sections_critiques) != 0)
       {
           (*s_etat_processus).erreur_systeme = d_es_processus;
           return;
       }
   
     scrutation_injection(s_etat_processus);      scrutation_injection(s_etat_processus);
   
     if (fonction == NULL)      if (fonction == NULL)
Line 1156  analyse(struct_processus *s_etat_process Line 1182  analyse(struct_processus *s_etat_process
 --------------------------------------------------------------------------------  --------------------------------------------------------------------------------
 */  */
   
 #   ifndef OS2  
     if ((*s_etat_processus).pourcentage_maximal_cpu < 100)      if ((*s_etat_processus).pourcentage_maximal_cpu < 100)
     {      {
   #       ifndef OS2
         getrusage(RUSAGE_SELF, &usage_final);          getrusage(RUSAGE_SELF, &usage_final);
   #       else
           usage_final = clock();
   #       endif
   
         gettimeofday(&horodatage_final, NULL);          gettimeofday(&horodatage_final, NULL);
   
         if (initialisation == d_vrai)          if (initialisation == d_vrai)
Line 1169  analyse(struct_processus *s_etat_process Line 1199  analyse(struct_processus *s_etat_process
                     (((real8) (horodatage_final.tv_usec -                      (((real8) (horodatage_final.tv_usec -
                     horodatage_initial.tv_usec)) / ((real8) 1E6));                      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)              if (temps_reel >= 0.1)
             {              {
   #               ifndef OS2
                 temps_cpu = ((real8) ((usage_final.ru_utime.tv_sec +                  temps_cpu = ((real8) ((usage_final.ru_utime.tv_sec +
                         usage_final.ru_stime.tv_sec) -                          usage_final.ru_stime.tv_sec) -
                         (usage_initial.ru_utime.tv_sec +                          (usage_initial.ru_utime.tv_sec +
Line 1179  analyse(struct_processus *s_etat_process Line 1213  analyse(struct_processus *s_etat_process
                         usage_final.ru_stime.tv_usec) -                          usage_final.ru_stime.tv_usec) -
                         (usage_initial.ru_utime.tv_usec +                          (usage_initial.ru_utime.tv_usec +
                         usage_initial.ru_stime.tv_usec))) / ((real8) 1E6));                          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;                  pourcentage = 100 * temps_cpu / temps_reel;
   
Line 1197  analyse(struct_processus *s_etat_process Line 1234  analyse(struct_processus *s_etat_process
                     temporisation.tv_nsec = (attente - temporisation.tv_sec) *                      temporisation.tv_nsec = (attente - temporisation.tv_sec) *
                             1E9;                              1E9;
   
                     nanosleep(&temporisation, NULL);                      while(nanosleep(&temporisation, &temporisation) == -1)
                       {
                           if (errno != EINTR)
                           {
                               break;
                           }
                       }
                 }                  }
   
                 horodatage_initial = horodatage_final;                  horodatage_initial = horodatage_final;
Line 1212  analyse(struct_processus *s_etat_process Line 1255  analyse(struct_processus *s_etat_process
             usage_initial = usage_final;              usage_initial = usage_final;
         }          }
     }      }
 #   endif      else
       {
           initialisation = d_faux;
       }
   
 /*  /*
 --------------------------------------------------------------------------------  --------------------------------------------------------------------------------

Removed from v.1.60  
changed lines
  Added in v.1.75


CVSweb interface <joel.bertrand@systella.fr>