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 :

Comptage de Temps sous Linux C


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 13
    Par défaut Comptage de Temps sous Linux C
    Bonjour,

    J'aimerai faire un programme qui compte le temps , c'est à dire que par exemple chaque écoulement de 60 secondes je fait ceci é chaque écoulement de 60 minutes je fais cela.

    J'ai cherché un peu sur le NET et j'ai trouvé qu'il y a la fonction clock() .

    mais je sais pas trop comment l'utilisé dans mon cas .

    Merci d'avance de votre aide.

  2. #2
    Membre chevronné
    Avatar de deletme
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2011
    Messages : 257
    Par défaut
    Salut,

    Tu peux également essayé d'utiliser la librairie rtc.h (j'avais manipulé ce genre de chose sous Xenomai et ça marchait très bien). Avec la RTC tu peux générer des alarmes (interruptions) et configurer la tâche à exécuter :
    http://linux.die.net/man/4/rtc Tu dois pouvoir trouver un équivalent en français si tu le souhaites.

    Désolé de pas pouvoir t'aider plus mais je pense que certains ici sauront t'aiguiller mieux que moi.
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
    - Martin Golding
    Traduction obligatoire : "Toujours écrire du code en gardant en tête que le mec qui en assurera la maintenance est un psychopathe violent qui connait votre adresse"

  3. #3
    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

  4. #4
    Membre chevronné
    Inscrit en
    Juillet 2012
    Messages
    231
    Détails du profil
    Informations forums :
    Inscription : Juillet 2012
    Messages : 231
    Par défaut
    Bonjour,

    Pour effectuer une action après un temps donné, tu peux utiliser alarm ou setitimer.

  5. #5
    Membre éclairé Avatar de JulieCarree
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 50
    Par défaut
    Bonjour,

    Peut-être que cette demo trouvée je ne sais plus où (sans doute sur un tuto du site) devrait éclairer ta lanterne :

    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
    /* essai avec time.h */
    /* commande compil gcc -std=c99 -Wall compte_a_rebours.c -o compte_a_rebours.exe */
     
    #include <stdio.h>
    #include <time.h>
     
    void attente(float temps);
     
    int main(void)
    {
        int compteur;
     
        for(compteur=10;compteur>0;compteur--){
            printf("%d...\n", compteur);
     
            attente(12);
        }
     
        puts("BONNE ANNEE !!!\n");
     
        return 0;
    }
     
    void attente(float temps)
    {
        clock_t arrivee = clock()+(temps*CLOCKS_PER_SEC); // On calcule le moment où l'attente devra s'arrêter
     
        while(clock()<arrivee);
    }

  6. #6
    Membre chevronné
    Avatar de deletme
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2011
    Messages : 257
    Par défaut
    Salut,

    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
    /* essai avec time.h */
    /* commande compil gcc -std=c99 -Wall compte_a_rebours.c -o compte_a_rebours.exe */
     
    #include <stdio.h>
    #include <time.h>
     
    void attente(float temps);
     
    int main(void)
    {
        int compteur;
     
        for(compteur=10;compteur>0;compteur--){
            printf("%d...\n", compteur);
     
            attente(12);
        }
     
        puts("BONNE ANNEE !!!\n");
     
        return 0;
    }
     
    void attente(float temps)
    {
        clock_t arrivee = clock()+(temps*CLOCKS_PER_SEC); // On calcule le moment où l'attente devra s'arrêter
     
        while(clock()<arrivee);
    }
    Le problème de ce code est qu'il fait une attente active, c'est pour cela qu'il faudrait s'orienter vers une solution proposant des alarmes (interruptions).
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
    - Martin Golding
    Traduction obligatoire : "Toujours écrire du code en gardant en tête que le mec qui en assurera la maintenance est un psychopathe violent qui connait votre adresse"

  7. #7
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    @JulieCarree : pourquoi ne pas juste faire un sleep() ?

    @deletme : en fait, ça dépend de ce qu'on veut faire. Si c'est "je fais un truc, j'attends 60 secondes et je recommence", alors pourquoi pas une attente active. C'est très moche, je te l'accorde mais cela fonctionne. Quoique je préférerais faire un faire sleep(). Ca fait peut-être la même chose mais j'espère que c'est mon OS qui me réveille et non mon code qui fait une attente active. Si c'est faire une action périodique (de période 60 sec), alors il faut en effet faire une interruption qui se déclenche toutes les 60 sec et s'assurer que l'action dure moins de 60 sec.

  8. #8
    Membre éclairé Avatar de JulieCarree
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 50
    Par défaut
    Citation Envoyé par Alaa-linux Voir le message
    Bonjour,

    J'aimerai faire un programme qui compte le temps , c'est à dire que par exemple chaque écoulement de 60 secondes je fait ceci é chaque écoulement de 60 minutes je fais cela.

    J'ai cherché un peu sur le NET et j'ai trouvé qu'il y a la fonction clock() .

    mais je sais pas trop comment l'utilisé dans mon cas .

    Merci d'avance de votre aide.
    La solution que j'apporte (copiée/collée) utilise la fonction clock(), comme le souhaitait l'auteur du topic dans sa question.

  9. #9
    Membre émérite Avatar de orfix
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 707
    Par défaut
    Citation Envoyé par JulieCarree Voir le message
    La solution que j'apporte (copiée/collée) utilise la fonction clock(), comme le souhaitait l'auteur du topic dans sa question.
    Sauf que c'est moche très très moche...


  10. #10
    Membre éclairé Avatar de JulieCarree
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 50
    Par défaut
    Bonjour,

    @ Orfix :
    C'est du lourd, 98% du cpu, ça peut servir à faire des benchmark . (Humour)

    bonne journée.

  11. #11
    Membre Expert
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    952
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 952
    Par défaut
    Salut,

    Si j'ai bien compris, tu cherches plus un algorithme qu'autre chose. Voici un exemple python que je trouve assez simple à comprendre. Considère le comme du pseudo code. Il ne consomme quasiment pas de CPU. A toi de trouver les équivalents en C de time.time() et time.sleep(). INTERVAL est le nombre de secondes entre deux actions (ici simplement l'écriture d'un '+'). important: A partir du moment ou getEpoch retourne un entier et que INTERVAL est une entier, la division et la multiplication utilisées sont entières

    A+

    Pfeuh

    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
     
    import time
    import sys
     
    INTERVAL = 1
     
    def getEpoch():
        """return the number of seconds since 1st january 1970 in an integer"""
        return int(time.time())
     
    next_step = (getEpoch() / INTERVAL) * INTERVAL
    while 1:
        if getEpoch() > next_step:
            next_step += INTERVAL
            sys.stdout.write('+')
        time.sleep(0.001)

Discussions similaires

  1. Acquisition de données USB temps réel sous Linux Xenomai
    Par nourryan dans le forum Matériel
    Réponses: 1
    Dernier message: 03/05/2012, 14h45
  2. Réponses: 13
    Dernier message: 24/06/2008, 15h57
  3. Temps réel Embarqué sous linux
    Par naima2005 dans le forum Administration système
    Réponses: 1
    Dernier message: 08/01/2007, 06h46
  4. Temps d'execution d'un script c++ sous linux
    Par sharantyr dans le forum Linux
    Réponses: 10
    Dernier message: 04/06/2006, 18h51

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