Compteur de temps

Fermé
sarahchaima Messages postés 12 Date d'inscription mardi 22 septembre 2020 Statut Membre Dernière intervention 21 juin 2021 - Modifié le 27 sept. 2020 à 20:08
sarahchaima Messages postés 12 Date d'inscription mardi 22 septembre 2020 Statut Membre Dernière intervention 21 juin 2021 - 28 sept. 2020 à 13:19
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

yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
27 sept. 2020 à 21:23
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 mardi 22 septembre 2020 Statut Membre Dernière intervention 21 juin 2021
27 sept. 2020 à 23:15
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 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
27 sept. 2020 à 23:59
qui t'a demandé cela?
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
28 sept. 2020 à 11:49
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 mardi 22 septembre 2020 Statut Membre Dernière intervention 21 juin 2021 > yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024
Modifié le 28 sept. 2020 à 13:43
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 mardi 22 septembre 2020 Statut Membre Dernière intervention 21 juin 2021
Modifié le 28 sept. 2020 à 00:14
notre professeur,pour la question c'est moi qui je demande ,il nous a donné juste l'exercice
0