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
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
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 :
C'est une des façon de faire
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;
A+
Ou sinon, jouer avec GetTickCount.
![]()
L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. :bug: ___ "http://club.developpez.com/regles/#LIII-A"É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.4.2 Entreprise - Delphi 11.3 Entreprise - Visual studio 2022
OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.7)
- Déclarer les variables TTime
Code : Sélectionner tout - Visualiser dans une fenêtre à part InitTime, FinalTime : TTime;
- Initialiser la variable à l'entrée de l'utilisateur dans le programme
Code : Sélectionner tout - Visualiser dans une fenêtre à part InitTime := Now;- Calculer le temps passé par l'utilisateur à sa sortie
Code : Sélectionner tout - Visualiser dans une fenêtre à part FinalTime := Now - InitTime;
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 :
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 := Format('%0.2d:%0.2d:%0.2d', [total div 3600, (total mod 3600) div 60, (total mod 3600) mod 60]);
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));
L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. :bug: ___ "http://club.developpez.com/regles/#LIII-A"É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.4.2 Entreprise - Delphi 11.3 Entreprise - Visual studio 2022
OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.7)
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
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
![]()
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
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 !
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.
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
Partager