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

 Delphi Discussion :

Comment chronométrer le temps passé sur un programme ?


Sujet :

Delphi

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Comment chronométrer le temps passé sur un programme ?
    Bonjour,

    J'aimerai chronométré le temps passé sur le programme par l'utilisateur dans le but de calculer des quotas (programme de sondage téléphonique).

    Pourriez vous m'aider ?

    Merci

    Charlotte

  2. #2
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Salut,

    Est ce que l'on doit voir le temps passé qui s'affiche au fur et à mesure ?
    J'entends par la : Est ce que le programme doit afficher en temps réel le temps écoulé depuis l'ouverture du programme ?

    Une solution simple serait de faire ainsi :

    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
    var
      Form1: TForm1;
      StartChrono:TDateTime;
     
    implementation
     
    {$R *.dfm}
     
     
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      // On récupère la date ainsi que l'heure à laquelle l'application s'est lancée
      StartChrono:=Now;
    end;
     
    procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    var
      duree:TDateTime;
    begin
      // On récupère la durée écoulée
      duree:=Now-StartChrono;
      // On affiche la durée
      ShowMessage(TimeToStr(duree));
    end;
    C'est une des façon de faire

    A+

  3. #3
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 664
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 664
    Points : 6 967
    Points
    6 967
    Par défaut
    Ou sinon, jouer avec GetTickCount.

    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.1 Entreprise
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.4)

  4. #4
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Points : 1 199
    Points
    1 199
    Par défaut
    1. Déclarer les variables TTime
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      InitTime, FinalTime : TTime;
    2. Initialiser la variable à l'entrée de l'utilisateur dans le programme
    3. Calculer le temps passé par l'utilisateur à sa sortie
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      FinalTime := Now - InitTime;

  5. #5
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Citation Envoyé par Lung Voir le message
    Ou sinon, jouer avec GetTickCount.

    Oui, j'y avais pensé mais je n'arrive pas à reformater le résultat pour dire d'avoir la notion hh:mm:ss

  6. #6
    Expert confirmé

    Profil pro
    Leader Technique
    Inscrit en
    Juin 2005
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Leader Technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 756
    Points : 4 170
    Points
    4 170
    Par défaut
    Attention avec GetTickCount, le compteur s'incrémente à partir du démarrage de la machine. Il arrive donc un moment où le compteur fait un overflow et retourne au début...
    Si l'application est utilisée sur un serveur, ça peut arriver.

    Sinon pour formater le résultat au format hh:mm:ss, il suffit de faire un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
       debut := GetTickCount;
       ...
       fin := GetTickCount;
       total := (fin - debut) div 1000; // Calcul du temps en secondes.
       temps := Format('%0.2d:%0.2d:%0.2d', [total div 3600, (total mod 3600) div 60, (total mod 3600) mod 60]);
    Ou encore :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
       debut := GetTickCount;
       ...
       fin := GetTickCount;
       total := (fin - debut) div 1000; // Calcul du temps en secondes.
       temps := TimeToStr( total / (3600 * 24));

  7. #7
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 664
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 664
    Points : 6 967
    Points
    6 967
    Par défaut
    Citation Envoyé par Franck SORIANO Voir le message
    Il arrive donc un moment où le compteur fait un overflow et retourne au début...
    C'est quoi la limite ?


    Citation Envoyé par Franck SORIANO Voir le message
    Si l'application est utilisée sur un serveur, ça peut arriver.
    Effectivement.
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.1 Entreprise
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.4)

  8. #8
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Citation Envoyé par Lung Voir le message
    C'est quoi la limite ?
    GetTickCount renvoie un Cardinal, donc la limite se rapporte à l'étendue de ce type soit: 49,7 jours.

    @+ Claudius

  9. #9
    Membre averti Avatar de archonte
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 341
    Points : 392
    Points
    392
    Par défaut
    je crois que tu seras interessé par le post suivant qui détaille la précision des différentes techniques de mesure du temps et leur emploi !
    "Je n'ai jamais rencontré d'homme si ignorant qu'il n'eut quelque chose à m'apprendre."
    Galilée

  10. #10
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    D'ailleurs, le fameux retour à Zéro au bout de 49,7 jours faisait planter Win98

    il y a aussi GetTickCount64 ou QueryPerformanceCounter, il y a de nombreux de codes de mesure de temps sur le forum, on aime bien comparer les temps sur les fonctions pour qui aura la version la plus rapide

    Tient, j'ai cela qui traine dans mon appli à bordel :

    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
    class procedure GetBeginTime(var Value: Int64);
    begin
       QueryPerformanceCounter(Value);
    end;
     
    class function ElapsedTime(var BeginTime: Int64): Cardinal;
    var
       EndTime, TickPerSec: Int64;
    begin
       QueryPerformanceCounter(EndTime);
       QueryPerformanceFrequency(TickPerSec);
       Result := Round((EndTime - BeginTime) / TickPerSec * 1000);
    end;
     
    function FormatMS(MilliSecondes: Cardinal): string;
    var
      Hour, Min, Sec: Cardinal;
    begin
      Hour := MilliSecondes div 3600000;
      MilliSecondes := MilliSecondes mod 3600000;
      Min := MilliSecondes div 60000;
      MilliSecondes := MilliSecondes mod 60000;
      Sec := MilliSecondes div 1000;
      MilliSecondes := MilliSecondes mod 1000;
      Result := Format('%.2d:%.2d:%.2d:%.3d', [Hour, Min, Sec, MilliSecondes]);
    end;
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  11. #11
    Membre habitué Avatar de stfanny31
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2008
    Messages : 254
    Points : 163
    Points
    163
    Par défaut 'un Timer'
    salut a tousquestion temps j'ai toujour utilser 'un Timer'
    je peut le programmer comme je veux a la vitesse que je veut ...
    que on pencer vous

    merci bcp

  12. #12
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Le Timer permet de lancer presque réguilièrement une tache, le sujet concerne la mesure du temps qui s'écoule entre le début et la fin d'une tache, cela n'est pas lié ... quoi qu'en temps réel, le temps du prochain cycle de repos dépend du précédent ...
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  13. #13
    Membre averti Avatar de zemeilleurofgreg
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    515
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 515
    Points : 346
    Points
    346
    Par défaut
    pourquoi ne pas soustraire l'heure de fermeture de l'appli à l'heure de lancement de l'appli ?
    stocker cette valeur dans un fichier quelquonque, la modifier, et ensuite la réutiliser pour afficher le temps total quand celoa est nécessaire !
    [Il était une fois Delphi ....]


  14. #14
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Points : 1 199
    Points
    1 199
    Par défaut
    C'est exactement ce que j'ai proposé dans mon premier post et il me semble que l'on cherche midi à quatorze heures.
    On peut également stocker le total de temps d'utilisation dans un clé de la base de registres créée à cet effet.

  15. #15
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Tout simplement que l'heure sur une machine peut-être changée, alors que GetTickCount ou QueryPerformance sont fiables car leur valeur ne fait que progresser sans pouvoir être modifier ...

    par contre stocker cela en fichier ou en base de registre, c'est une idée mais n'est pas très pertinante, une base de données centralisée (pour un programme de télé-opérateur, il doit y avoir déjà cela) de pour l'ensemble des programmes, permet de stocker l'heure d'ouverture du programme, la fermeture, ... l'heure biensûr ne sera pas inséré par le programme mais serait un TimeStamp du SGBD ... donc l'heure du serveur, ce qui serait plus pertinent pour les stats ...
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

Discussions similaires

  1. chronomètre du temps passé sur une production
    Par speedev dans le forum Autres Logiciels
    Réponses: 0
    Dernier message: 04/03/2011, 11h08
  2. Comment caluler le temps passé sur une tache ?
    Par Lola21 dans le forum Excel
    Réponses: 6
    Dernier message: 27/04/2010, 14h04
  3. temps passé sur un site web
    Par tsotb dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 18/07/2007, 21h41
  4. Calcul temps passé sur une page PHP pur
    Par mathieugamin dans le forum Langage
    Réponses: 10
    Dernier message: 29/03/2007, 17h22
  5. Temps passé sur une page !!
    Par nizarsm dans le forum ASP
    Réponses: 4
    Dernier message: 30/06/2006, 21h42

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