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 :

Gestion du temps


Sujet :

C

  1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur/Chercheur
    Inscrit en
    Novembre 2007
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur/Chercheur

    Informations forums :
    Inscription : Novembre 2007
    Messages : 122
    Points : 46
    Points
    46
    Par défaut Gestion du temps
    Bonjour,
    j'ai un code très simple :
    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
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    #include <time.h>
     
    int i=0, k=0;
     
    int main()
    {
    	for (i=0; i<15; i++) {
    		printf("ticks: %f\n", (double)clock());
    		for (k=0;k<5; k++) {sleep(1);}
    	}
    	return 0;
    }
    Je voudrais juste que ce qui est affiché s’incrémente or j'obtiens tout le temps 0.00...
    Quelqu'un pourrait m'expliquer comment ça marche ?

  2. #2
    Membre expérimenté
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    946
    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 : 946
    Points : 1 351
    Points
    1 351
    Par défaut
    Salut,

    J'ai des erreurs de compil car sleep n'est pas une fonction multi plateformes, je suis sous windows. Après l'avoir commentée, le programme marche comme je m'y attendais... Mais tellement vite...

    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
    ticks: 0.000000
    ticks: 0.000000
    ticks: 0.000000
    ticks: 0.000000
    ticks: 0.000000
    ticks: 0.000000
    ticks: 0.000000
    ticks: 0.000000
    ticks: 1.000000
    ticks: 1.000000
    ticks: 1.000000
    ticks: 1.000000
    ticks: 1.000000
    ticks: 1.000000
    ticks: 1.000000
     
    Process returned 0 (0x0)   execution time : 0.006 s
    Press any key to continue.
    A+

    Pfeuh

    P.S. Le lien vers un header qu'Ed avait donné ici est vraiment pratique.

  3. #3
    Membre du Club
    Homme Profil pro
    Ingénieur/Chercheur
    Inscrit en
    Novembre 2007
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur/Chercheur

    Informations forums :
    Inscription : Novembre 2007
    Messages : 122
    Points : 46
    Points
    46
    Par défaut
    Alors pourquoi chez moi, ça marche pas ? Enfin, ça marche un peu en effet mais ça s'incrémente de 10000 tous les 20 coups. Moi, je voudrais un truc précis qui s'incrémente moins mais à chaque coup.
    Et dans ton programme, ça veut dire qu'il arrive à faire 8 instructions par coup d'horloge ?

  4. #4
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Es-tu certain de la validité de ton cast vers un flottant ?

    Il arrive aussi que si un formateur de printf() n'est pas le bon, alors le résultat affiché est 0.

  5. #5
    Expert éminent sénior

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par binome-x Voir le message
    Je voudrais juste que ce qui est affiché s’incrémente or j'obtiens tout le temps 0.00...
    Quelqu'un pourrait m'expliquer comment ça marche ?
    D'abord clock est une valeur entière, et, pour avoir quelque chose qui veule dire quelque chose, comme spécifié dans le man, il faut diviser par CLOCKS_PER_SEC...

    Par contre, d'une part c'est le temps processeur utilisé (et non pas l temps réel passé), et d'autre part elle est très souvent beaucoup trop imprécise.

    J'avas mis à disposition dans les sources une fontion qui donnait le temps réel passé, en microsecondes..
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  6. #6
    Membre expérimenté
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    946
    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 : 946
    Points : 1 351
    Points
    1 351
    Par défaut
    Citation Envoyé par binome-x Voir le message
    Et dans ton programme, ça veut dire qu'il arrive à faire 8 instructions par coup d'horloge ?
    Prudemment, je dirais qu'il exécute plusieurs lignes de code C entre chaque incrémentation de la valeur fournie par clock(), fonction que je ne connais pas. Le nombre d'instructions, c'est au niveau langage machine et je n'ai aucune idée de la taille du code une fois compilé.

    A+

    Pfeuh

  7. #7
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 370
    Points : 23 625
    Points
    23 625
    Par défaut
    Citation Envoyé par binome-x Voir le message
    Alors pourquoi chez moi, ça marche pas ? Enfin, ça marche un peu en effet mais ça s'incrémente de 10000 tous les 20 coups. Moi, je voudrais un truc précis qui s'incrémente moins mais à chaque coup.
    Et dans ton programme, ça veut dire qu'il arrive à faire 8 instructions par coup d'horloge ?
    Citation Envoyé par pfeuh Voir le message
    Prudemment, je dirais qu'il exécute plusieurs lignes de code C entre chaque incrémentation de la valeur fournie par clock(), fonction que je ne connais pas. Le nombre d'instructions, c'est au niveau langage machine et je n'ai aucune idée de la taille du code une fois compilé.
    C'est souviron34 qui a donné la bonne réponse : clock() renvoie le temps processeur réellement consommé par le processus et pas la durée écoulée depuis le lancement. Quand on fait sleep(), on rend la main au système qui s'en sert à autre chose et ne la retransmet au processus qu'à l'issue du laps de temps spécifiée. Un processus en sommeil ne consomme donc aucun temps processeur.

    D'autre part, clock() renvoie ce temps en « unités d'horloge ». Initialement des « ticks » mais POSIX réclame que cette unité soit maintenant le millionième de seconde. Quoi qu'il en soit, c'est donc un nombre entier qui est retourné. Le convertir en double ne sert donc absolument à rien, et n'apporte certainement un surplus de précision.

Discussions similaires

  1. FB/IB gestion du temps
    Par lio33 dans le forum Débuter
    Réponses: 4
    Dernier message: 04/10/2005, 10h55
  2. [MFC] Gestion du temps
    Par Kevgeii dans le forum MFC
    Réponses: 7
    Dernier message: 02/07/2005, 14h21
  3. Aide pour l'analyse d'un problème de gestion de temps
    Par PAINCO dans le forum Décisions SGBD
    Réponses: 8
    Dernier message: 03/06/2005, 15h49
  4. [VB.NET] Gestion en temps réel d'une bdd access
    Par qwiskas dans le forum Windows Forms
    Réponses: 6
    Dernier message: 12/02/2005, 19h37
  5. fonction de gestion du temps
    Par fati dans le forum C
    Réponses: 5
    Dernier message: 26/12/2002, 16h32

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