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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur/Chercheur
    Inscrit en
    Novembre 2007
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur/Chercheur

    Informations forums :
    Inscription : Novembre 2007
    Messages : 123
    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 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,

    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 confirmé
    Homme Profil pro
    Ingénieur/Chercheur
    Inscrit en
    Novembre 2007
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur/Chercheur

    Informations forums :
    Inscription : Novembre 2007
    Messages : 123
    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
    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
    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
    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
    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

  6. #6
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 478
    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.

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

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