Compteur de temps

Bonjour,
je veux savoir si par exemple je fais un alarm(80) et que mon programme est devenu en pause après un ctrl+z,je veux une méthode qui me permet de savoir combien du temps a passé exactement de mes 80 secondes pour
que la prochaine fois quand mon programme est en cours d'exécution il termine le reste du 80 secondes ,est ce que un simple compteur ça suffira?
volatile sig_atomic_t temps=0;

j’ai essayé mais il y a toujours des secondes en plus

#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<signal.h>


volatile sig_atomic_t cpt_CTRL_C=0;
volatile sig_atomic_t CAS=0;
volatile sig_atomic_t proc_en_pause=0;
volatile sig_atomic_t temps=0;
static void IntHandler(int sigNum){

 cpt_CTRL_C ++;
 if(cpt_CTRL_C==3){
    printf("\n programme termne\n");
    kill(getpid(),SIGKILL);
}

       
} 
static void TstHandler(int sigNum){

 if(proc_en_pause==0){// debut de prise de mesures
  proc_en_pause=1;//passer a letat suivant(active) pour la prochaine fois
  printf("\n Debut de prise de mesures\n");
  alarm(1);
 
                      }else if(proc_en_pause==1){
                               proc_en_pause=2;//processus desactives
                               printf("\n Programme suspendu \n");
                       

                                                 }else if(proc_en_pause==2){   
                                                          proc_en_pause=1;
                                                          printf("\n programme en cours dexecution\n");//processus actives
                                                          kill(getpid(),SIGCONT);
                                                          int x=60-temps;
                                                          alarm(x);
                                             
                                                                            }
       
}

static void AlarmHandler(int sigNum){
 temps ++;
 if(proc_en_pause==1){//le programme est en cours dexecution(letat actif)
 if(CAS==0){
   CAS ++;
   printf("\n processus:1,mesure:1 \n");
   temps=0;
   alarm(60);
           }else if(CAS==1){
                   CAS++;
                   printf("\n processus:1,mesure:2 \n");
                   temps=0;
                   alarm(60);
                           }else {
                                  CAS=0;
                                  printf("\n processus:2,mesure \n");
                                  temps=0;
                                  alarm(60);
                                 }
    
                     }  
}

int main(){

    signal(SIGINT, IntHandler);
    signal(SIGTSTP,TstHandler);
    signal(SIGALRM,AlarmHandler);
            
    while(1){
         pause(); 
     
            }
   
}


Configuration: Linux / Firefox 79.0

3 réponses

  1. bonsoir,
    ils nous ont demandé d'utiliser ces signaux; pour le temps j'ai utilisé un chronomètre et j'ai vu que la durée dépasse une minute; ma question est ce que c'est possible d'obtenir ou de calculer le temps déjà passé de ma duré qui est 60 secondes
    par exemple: si le premier message est affiché ,après une minute le 2 ème message sera affiché
    alors si je met mon programme en pause juste après le premier message par exemple au 20 èmme secondes alors il reste 40 secondes pour afficher le deuxième message donc après la reprise de la pause je veux qu'il attend juste 40 seconde et pas moins ou plus pour continuer et afficher le deuxième message
    1. Contributeur
      qui t'a demandé cela?
    2. @yg_beOui bien sûr je suis totalement d'accord avec vous; il faut qu'on fait nos exercices nous mêmes ,merci
  2. notre professeur,pour la question c'est moi qui je demande ,il nous a donné juste l'exercice