Compteur de temps

sarahchaima Messages postés 12 Date d'inscription   Statut Membre Dernière intervention   -  
sarahchaima Messages postés 12 Date d'inscription   Statut Membre Dernière intervention   -
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
A voir également:

3 réponses

yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 
bonjour,
"il y a toujours des secondes en plus": ce n'est pas clair. peux-tu donner un exemple?
il me semble que la méthode choisie est très complexe et très peu précise.
pourquoi n'utilises-tu pas une fonction telle que clock()?
https://fr.wikiversity.org/wiki/Fonctions_de_base_en_langage_C/time.h
0
sarahchaima Messages postés 12 Date d'inscription   Statut Membre Dernière intervention  
 
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
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
qui t'a demandé cela?
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
oui, c'est possible, et je t'ai suggéré comment faire.
tu ne progresseras pas ni n'apprendras si nous répondons à ta place.
https://www.commentcamarche.net/infos/25899-demander-de-l-aide-pour-vos-exercices-sur-ccm/
0
sarahchaima Messages postés 12 Date d'inscription   Statut Membre Dernière intervention   > yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention  
 
Oui bien sûr je suis totalement d'accord avec vous; il faut qu'on fait nos exercices nous mêmes ,merci
0
sarahchaima Messages postés 12 Date d'inscription   Statut Membre Dernière intervention  
 
notre professeur,pour la question c'est moi qui je demande ,il nous a donné juste l'exercice
0