IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

creer une chrono !


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 63
    Par défaut creer une chrono !
    bonjour
    je demande vote aide
    il me faut une astuce, pour creer un chrono a partir du turbo c++ DOS
    le principe : je veux creer une chrono qui affiche par exemple :
    6:32 => 6:33 => 6:34 => ....
    jusqu'a ce que je clique sur une touche.
    j'ai entendu que la fonction _strtime peux faire le truc, mais je sais pas comment m'enservir

  2. #2
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par moncef357
    bonjour
    je demande vote aide
    il me faut une astuce, pour creer un chrono a partir du turbo c++ DOS
    le principe : je veux creer une chrono qui affiche par exemple :
    6:32 => 6:33 => 6:34 => ....
    jusqu'a ce que je clique sur une touche.
    j'ai entendu que la fonction _strtime peux faire le truc, mais je sais pas comment m'enservir
    Il faut savoir que ce que tu veux faire (un chronomètre) ne peut pas se faire en C standard. En effet, les fonctions qui lisent sur le flux d'entre standard sont bloquantes et suspendent donc l'exécution. Il ne peux donc pas y avoir affichage et test du clavier en même temps.

    Il y a deux façons de procéder :

    1. 2 threads : un pour l'affichage et un pour la surveillance bloquante du clavier. C'est la méthode moderne raisonnable. Il faut un système qui supporte les threads comme Windows (Win32) ou GNU/Linux.
    2. 1 seul thread, mais avec une boucle qui fait l'affichage et la surveillance du clavier non blocante. Cette méthode est la seule possible avec Turbo C++ sous DOS. C'est crade, mais ça marche


    Pseudo-code (#2)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    next_time := time() + 1
    fin := FALSE
    DO
       IF kbhit()
          c := getch()
          fin := c = ESC
       ENDIF
     
       now := time()
       IF now >= next_time ; EDIT
          afficher (now)
          next_time := now + 1
        ENDIF
    WHILE NOT fin

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 63
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Il faut savoir que ce que tu veux faire (un chronomètre) ne peut pas se faire en C standard. En effet, les fonctions qui lisent sur le flux d'entre standard sont bloquantes et suspendent donc l'exécution. Il ne peux donc pas y avoir affichage et test du clavier en même temps.

    Il y a deux façons de procéder :

    1. 2 threads : un pour l'affichage et un pour la surveillance bloquante du clavier. C'est la méthode moderne raisonnable. Il faut un système qui supporte les threads comme Windows (Win32) ou GNU/Linux.
    2. 1 seul thread, mais avec une boucle qui fait l'affichage et la surveillance du clavier non blocante. Cette méthode est la seule possible avec Turbo C++ sous DOS. C'est crade, mais ça marche


    Pseudo-code (#2)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    next_time := time() + 1
    fin := FALSE
    DO
       IF kbhit()
          c := getch()
          fin := c = ESC
       ENDIF
     
       now := time()
       IF time() > next_time
          afficher (now)
          next_time := now + 1
        ENDIF
    WHILE NOT fin


    pour ce que tu vient de me donner la c'est du PASCAL
    et malheureusement ce truc la que j'ai demandé je suis obligé de le faire avec le language c

  4. #4
    Membre émérite Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Par défaut
    Citation Envoyé par moncef357
    pour ce que tu vient de me donner la c'est du PASCAL
    et malheureusement ce truc la que j'ai demandé je suis obligé de le faire avec le language c
    Ce n'est pas du Pascal, mais du pseudo-code. A vous de le traduire en C.

  5. #5
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 63
    Par défaut
    Citation Envoyé par stephl
    Ce n'est pas du Pascal, mais du pseudo-code. A vous de le traduire en C.
    alors tu pourra peut etre m'aider a le traduire??

  6. #6
    Membre expérimenté Avatar de Nyarlathotep
    Profil pro
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    174
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 174
    Par défaut
    Code qui (devrait) compiler :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    time_t temps_now;
    time_t temps_avant;
    time_t temps_ecoule;
    time(&temps_avant);
    do
    {
    while (kbhit()==0)
    {
    time(&temps_now);
    temps_ecoule=temps_now-temps_avant;
    printf("%d\n",&temps_ecoule);
    //DOS
    system("cls");
    }
    c=getch();
    }while(c!=27);

  7. #7
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par moncef357
    pour ce que tu vient de me donner la c'est du PASCAL
    et malheureusement ce truc la que j'ai demandé je suis obligé de le faire avec le language c
    Non. Comme indiqué, c'est du pseudo-code. Je te rappelle que c'est à toi d'écrire le code, pas à moi. Je te donne des indications générales, c'est tout...

    Fait de ton mieux et poste ton code. Si tu ne connais pas les bases du langage C, et quelques extensions de Borland (conio), tu ne peux pas faire ce travail.

    EDIT : J'ai vu que tu avais quelques notions, alors un petit coup de pouce supplémentaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    #include <time.h>
     
    #ifdef __turboc__
    #include <conio.h>
    #else
    #include <conio2.h>
    #endif
     
    #define ESC 27
     
    int main (void)
    {
    /* next_time := time() + 1 */
       time_t next_time = time(NULL) + 1;
     
    /* fin := FALSE */
       int fin = 0;
     
    /* DO */
       do
       {
    /*    IF kbhit() */
          if (kbhit())
          {
    /*       c := getch() */
             int c = getch();
    /*       fin := c = ESC */
             fin = c == ESC;
          }
    /*    ENDIF */
     
    /*    now := time() */
    /*    IF now >= next_time */
    /*       afficher (now) */
    /*       next_time := now + 1 */
    /*     ENDIF */
     
    /* WHILE NOT fin */
       }
       while (!fin);
     
       return 0;
    }
    Je te laisse terminer... Comme tu peux le voir ce n'était pas si difficile...

  8. #8
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Il faut savoir que ce que tu veux faire (un chronomètre) ne peut pas se faire en C standard. En effet, les fonctions qui lisent sur le flux d'entre standard sont bloquantes et suspendent donc l'exécution. Il ne peux donc pas y avoir affichage et test du clavier en même temps.
    Si si tu peux

    Mais c'est assez compliqué (poll + (fscanf) + réaffichage prompt) donc pas pour ce posteur..

  9. #9
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par souviron34
    Si si tu peux

    Mais c'est assez compliqué (poll + (fscanf) + réaffichage prompt) donc pas pour ce posteur..
    J'ai dit qu'il n'y avait pas de solution standard.

    De plus, il est sous DOS (Turbo C++), donc pas de poll(), ni de select()...

  10. #10
    Membre expérimenté Avatar de Nyarlathotep
    Profil pro
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    174
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 174
    Par défaut Time...
    Tu peux récupérer l'heure de départ, et ensuite faire une soustraction avec l'heure courante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    int temps_sec_debut;
    int temps_sec_maintenant;
    int temps_ecoule=temps_sec_maintenant-temps_sec_debut;
    PS: Pour récupérer l'heure, on utilise time :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    #include <time.h> //Contient la fonction
     
    //dans le code:
    time_t temps;
    time(&temps);
    //temps=temps écoulé en secondes depuis 1970
    Voir MSDN.

  11. #11
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 63
    Par défaut
    Citation Envoyé par Nyarlathotep
    Tu peux récupérer l'heure de départ, et ensuite faire une soustraction avec l'heure courante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    int temps_sec_debut;
    int temps_sec_maintenant;
    int temps_ecoule=temps_sec_maintenant-temps_sec_debut;
    PS: Pour récupérer l'heure, on utilise time :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    #include <time.h> //Contient la fonction
     
    //dans le code:
    time_t temps;
    time(&temps);
    //temps=temps écoulé en secondes depuis 1970
    Voir MSDN.

    j'ai pas trop bien compris comment je peux utiliser ton truc
    bon voila une partie de mon program :
    do
    {
    while (kbhit()==0)
    {
    ///traitement
    }
    c=getch();
    }while(c!=27);


    ce que je veux moi, que dans cette boucle j'introduit le compteur, et il m'affiche le chrono seconde par seconde, si je sort de la boucle finale alors ils STOP.

Discussions similaires

  1. [langage] Creer une fonction qui met en majuscule ?
    Par Cyber@l dans le forum Langage
    Réponses: 6
    Dernier message: 04/12/2003, 18h44
  2. [TP]comment creer une disquette bootable (les fichiers)
    Par ludovic5532 dans le forum Turbo Pascal
    Réponses: 5
    Dernier message: 25/10/2003, 18h46
  3. Créer une diquette de boot
    Par gwen-al dans le forum Administration système
    Réponses: 2
    Dernier message: 02/07/2003, 14h48
  4. jaimerais savoir commen creer une grille.......
    Par zephyr dans le forum Flash
    Réponses: 5
    Dernier message: 29/04/2003, 12h14
  5. [VB6]Créer une Base de données
    Par ThierryAIM dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 07/04/2003, 17h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo