source: Sophya/trunk/SophyaLib/SysTools/ctimer.cc@ 443

Last change on this file since 443 was 241, checked in by ansari, 26 years ago

ppersist + pexc

File size: 2.1 KB
Line 
1//
2// $Id: ctimer.cc,v 1.2 1999-04-21 13:11:59 ansari Exp $
3//
4
5#include "machdefs.h"
6#include "ctimer.h"
7
8//++
9// Class Timer
10// Lib Outils++
11// include ctimer.h
12//
13// Chronométrage de programmes. Le constructeur mémorise l'heure et
14// le temps CPU, ainsi qu'un message éventuel.
15//
16// Split affiche le temps partiel.
17//
18// Le destructeur affiche le temps total (CPU, et écoulé).
19//
20// Des macros permettent une utilisation simplifiée :
21// * TIMEF crée un objet de type Timer, avec le nom de la function
22// courante comme message. Le temps écoulé sera affiché à la sortie
23// de la function.
24// * SPLITTIME affiche le temps partiel du compteur crée par TIMEF
25// * TIMEN(nom) permet de donner un autre nom que le nom de la fonction.
26//--
27
28
29//++
30// Titre Constructeurs
31//--
32
33//++
34// Timer::Timer(const char* name)
35// Crée un objet qui mémorise l'heure et le temps CPU du process courant.
36// Le destructeur affiche les temps écoulé et CPU utilisé.
37//--
38
39Timer::Timer(const char* name)
40: timerName(name)
41{
42 cpu0 = cpuSplit = clock();
43 elapse0 = elapseSplit = time(0);
44}
45
46//++
47// Titre Méthodes
48//--
49
50//++
51// Timer::Split(const char* comm)
52// Affiche le temps partiel.
53//--
54
55
56void Timer::Split(const char* comm)
57{
58 time_t elapse = time(0);
59 clock_t cpu = clock();
60
61 float cpuSecT = ((float)cpu - (float)cpu0) / (float)(CLOCKS_PER_SEC);
62 float cpuSecP = ((float)cpu - (float)cpuSplit) / (float)(CLOCKS_PER_SEC);
63
64 int etm = elapse - elapseSplit;
65 int etmt = elapse - elapse0;
66
67 cout << "***Timing " << (comm ? comm : timerName) << endl;
68
69// Pour des formats comme ca, la syntaxe printf est plus agreable.
70// Pour ne pas melanger stdio/iostream (pb de desynchronisation sur
71// autres C++ que GNU), on fait un cout << chaine.
72
73 char out[200];
74 sprintf(out,"CPU Time: Total= %g (Partial= %g) Sec.",
75 cpuSecT, cpuSecP);
76 cout << out << endl;
77
78 sprintf(out,"Elapsed Time: Total= %02d:%02d:%02d (Partial=%02d:%02d:%02d)",
79 etmt/3600, (etmt%3600)/60, etmt%60,
80 etm/3600, (etm%3600)/60, etm%60);
81
82 cout << out << endl;
83
84 elapseSplit = elapse;
85 cpuSplit = cpu;
86}
87
88Timer::~Timer()
89{
90 Split();
91}
Note: See TracBrowser for help on using the repository browser.