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 :

Temps D'execution D'un Programme


Sujet :

C

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mai 2006
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 35
    Points : 32
    Points
    32
    Par défaut Temps D'execution D'un Programme
    bonjour;
    comment pourrais je calculer le temps d'execution d'un programme developpé en c sous windows??
    est ce qu'il y a une fonction qui fait ca calclul ou est ce que je dois developpez moi meme le code qui permet ce calcul?

    merci d'avance

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Si tu veux connaître le temps processeur exact, tu peux utiliser GetProcessTimes().
    Sinon, je ne crois pas que Windows offre grand-chose d'autre pour fournir clé en main le temps d'exécution du programme: Il faudra utiliser les fonctions donnant l'heure actuelle et faire une soustraction...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    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
    voir l'exemple en C cité dans mon code fourni ici :

    http://www.developpez.net/forums/sho...d.php?t=324756
    "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

  4. #4
    Nouveau membre du Club
    Inscrit en
    Mai 2006
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 35
    Points : 32
    Points
    32
    Par défaut Cannot open include file: 'sys/time.h'
    j ai testé votre code qui permet de calculer le temps d'execution mais il m donne l'erreur suivante:

    Cannot open include file: 'sys/time.h'

    le fichier n existe po sur l disq dur !
    comment pourrais je resoudre ce probleme?
    Merci

  5. #5
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    En effet, sys/time.h n'existe pas sous Win32.
    Souviron34, tu t'es encore gouré...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Citation Envoyé par Médinoc
    Souviron34, tu t'es encore gouré...
    Je te retourne le compliment, j'utilise mingw sous windows et j'ai un un fichier sys/time.h !

  7. #7
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    C'est une extension MinGW, tout comme <dirent.h>.
    L'autorité, ce n'est pas le SDK MinGW, mais le SDK fourni par les auteurs de Windows...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    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 Médinoc
    En effet, sys/time.h n'existe pas sous Win32.
    Souviron34, tu t'es encore gouré...

    je suis désolé, mais si Windows ne suis pas le standard C "de facto" ....

    http://www.gnu.org/software/libc/man...-an-Alarm.html

    The setitimer function is the primary means for setting an alarm. This facility is declared in the header file sys/time.h. The alarm function, declared in unistd.h, provides a somewhat simpler interface for setting the real-time timer.
    Donc disponible sous toutes les versions de *n*x..

    C'est également déclaré dans Mingw, dans CodeBlocks ....
    "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

  9. #9
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Ton manuel n'est pas standard, mais GNU.
    Le standard C ne connait aucun header dans le sous-dossier "sys".

    La plupart des headers dans sys sont des headers POSIX ou GNU, ce que Windows n'a aucune obligation de fournir.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  10. #10
    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
    ET ???

    le P.O dit qu'il développe sous Windows, pas avec quoi.....

    Si c'est avec MingW, cygwin, ou avec CodeBlock comme bcp ici, ça passe. Maintenant je ne dis pas que j'ai fourni un code pour TOUS les OS. Mais comme je sais bien que Windows n'est pas conforme à l'usage usuel, et que je ne le connais que peu et n'ai que peu envie de le connaître, je réponds avec ce que je sais...
    "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

  11. #11
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Je ne suis même pas certain que ça marche vraiment sous MinGW, car Windows ne supporte pas SIGALRM.
    Il serait intéressant de tester...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    410
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 410
    Points : 361
    Points
    361
    Par défaut
    perso j'ai toujours fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #include <time.h>
    long deb,fin;
    deb=clock();
    //...
    //... TACHES
    //...
    fin=clock();
    printf("temps=%lf sec\n",(double)((double)(fin-deb))/CLOCKS_PER_SEC);

  13. #13
    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
    oui, mais reptils si tu regardes les man pages il y a 3 inconvénients majeurs à ton code :

    1) le plus important, cela donne le temps "user", pas le temps absolu (c'est à dire cela donne le temps passé lorsque ton programme TOURNE, pas lorsqu'il est "swappé" parce qu'un autre programme est en haut).
    2) dès que tu dépasses une certaine limite (que je n'ai plus en tête), tu dépasses la capacité de stockage (exemple : si tu veux faire un test sur 2 heures ou 24 heures, ça ne marche plus)


    http://www.linux-kheops.com/doc/man/...3/clock.3.html

    Le standard C autorise une valeur quelconque pour clock() au début du programme, il faut donc utiliser la différence entre la valeur actuelle et celle renvoyée par clock() au lancement du programme, pour obtenir une portabilité maximale. Notez que la valeur peut revenir à zéro. Sur un système 32 bits, lorsque CLOCKS_PER_SEC vaut 1000000, cette fonction redonnera les mêmes valeurs toutes les 72 minutes environ.
    La norme C99 dit :

    1 #include <time.h>
    clock_t clock(void);

    Description
    2 The clock function determines the processor time used.
    Returns
    3 The clock function returns the implementation’s best approximation to the processor time used by the program since the beginning of an implementation-defined era related only to the program invocation. To determine the time in seconds, the value returned by the clock function should be divided by the value of the macro CLOCKS_PER_SEC. If the processor time used is not available or its value cannot be represented, the function eturns the value (clock_t)(-1).269)
    et GNU dit (http://www.gnu.org/software/libc/man.../CPU-Time.html) :


    This function returns the calling process' current CPU time. If the CPU time is not available or cannot be represented, clock returns the value (clock_t)(-1).
    3) Et enfin le CLOCK_PER_SEC est une valeur définie en dur (dans time.h).

    Ce qui signifie que si tu changes de processeur, ou si le processeur n'est pas enregistré dans la distribution, ou si tu n'as pas mis le bon flag de compil avec la bonne architecture, en bref dans le cas général, la VRAIE valeur de l'horloge et le CLOCK_PER_SEC ne correspondent pas, et donc la mesure est fausse.
    "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

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    410
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 410
    Points : 361
    Points
    361
    Par défaut
    ok merci je ne savais pas tout ça.

  15. #15
    Nouveau membre du Club
    Inscrit en
    Mai 2006
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 35
    Points : 32
    Points
    32
    Par défaut mon probleme n'est toujours pas résolu
    Je ne peux pas utiliser la fonction clock() à cause des raisons que vous venez de citer , la fonction gettimeprocessing non plus à cause du fichier sys/time.h !
    est ce qu'il n y a pas un autre moyen??
    Merci

Discussions similaires

  1. Temps d'execution d'un programme
    Par rutabagas dans le forum Lisp
    Réponses: 8
    Dernier message: 24/12/2007, 16h41
  2. Réponses: 6
    Dernier message: 27/07/2007, 18h38
  3. temps d'execution d'un programme multithread
    Par La taupe dans le forum C
    Réponses: 2
    Dernier message: 10/01/2007, 17h44
  4. Réponses: 5
    Dernier message: 19/06/2006, 22h54
  5. temps d'execution d'un programme
    Par Invité(e) dans le forum C
    Réponses: 8
    Dernier message: 17/05/2006, 13h12

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