Main Page   Class Hierarchy   Compound List   File List   Compound Members   File Members  

Timer.cc

Go to the documentation of this file.
00001 /*
00002     File:           Timer.cc
00003 
00004     Function:       See header file
00005 
00006     Author(s):      Andrew Willmott
00007 
00008     Copyright:      (c) 1995-2000, Andrew Willmott
00009 
00010     Notes:          Any other useful timing calls?
00011 */
00012 
00013 
00014 #include "cl/Timer.h"
00015 #include <stdio.h>
00016 #include <math.h>
00017 
00018 Void Timer::StartTimer()
00019 {
00020     startTime = CurrentTime();
00021     lapTime = startTime;
00022 }
00023 
00024 Float Timer::GetTimer()
00025 {
00026     return(CurrentTime() - startTime);
00027 }
00028 
00029 Float Timer::DeltaTime()
00030 {     
00031     Float oldLapTime = lapTime;
00032     
00033     lapTime = CurrentTime();
00034     
00035     return(lapTime - oldLapTime);
00036 }
00037 
00038 Void Timer::StopTimer() /* Stops timer */
00039 {
00040     stopTime = CurrentTime();
00041 }
00042 
00043 Void Timer::ContTimer() /* Restarts timer */
00044 {
00045     Float temp;
00046 
00047     temp = CurrentTime();
00048     temp -= stopTime;
00049     startTime += temp;
00050     lapTime += temp;
00051 }
00052 
00053 /* --- Unix Time ----------------------------------------------------- */
00054 
00055 
00056 #ifdef UNIX_TIME
00057 
00058 /* Use the times() call */
00059 
00060 #include <unistd.h>
00061 #include <sys/times.h>
00062 #include <sys/time.h>
00063 #include <errno.h>
00064 #include "cl/String.h"
00065 
00066 Float ProgramTimer::CurrentTime()
00067 {
00068     struct tms  tb;
00069     Float       result;
00070     
00071     times(&tb);
00072     result = (Float)(tb.tms_utime) / CLK_TCK;
00073     if (addSystem)
00074         result += (Float)(tb.tms_stime) / CLK_TCK;
00075 
00076     return(result);
00077 }
00078 
00079 Float WallClockTimer::CurrentTime()
00080 {
00081     struct  timeval tv;
00082     Float   result;
00083     
00084     if (gettimeofday(&tv, 0))
00085         _Error(String().Printf("gettimeofday call failed: %d", errno));
00086 
00087     result = (tv.tv_sec & 0x0FFFF) + tv.tv_usec * 1e-6;
00088 
00089     return(result);
00090 }
00091 
00092 #endif
00093 
00094 
00095 /* --- Ansi Time ------------------------------------------------------ */
00096 
00097 
00098 #ifdef ANSI_TIME                /* Use clock() */
00099 
00100 #include <time.h>
00101 
00102 Float WallClockTimer::CurrentTime()
00103 {
00104     return(clock() / ((Float) CLOCKS_PER_SEC));
00105 }
00106 
00107 #endif
00108 
00109 
00110 /* --- Sgi Time ------------------------------------------------------ */
00111 
00112 
00113 #ifdef SGI_TIME
00114 
00115 // uses SGI multimedia routines.
00116 
00117 #include <dmedia/dmedia.h>
00118 
00119 typedef unsigned long long UST;
00120 
00121 Float WallClockTimer::CurrentTime()
00122 {
00123     UST temp;
00124     
00125     dmGetUST(&temp);
00126     
00127     return(((Float) temp) / 1e9);
00128 }
00129 
00130 #endif
00131 
00132 
00133 // --- Use rusage call ---------------------------------------------------------
00134 
00135 
00136 #ifdef RUSAGE_TIME
00137 
00138 #include <sys/time.h>
00139 #include <sys/resource.h>
00140 #include <unistd.h>
00141 
00142 Float ProgramTimer::CurrentTime()
00143 {
00144     struct rusage   usage;
00145     Float           result;
00146     
00147     getrusage(RUSAGE_SELF, &usage);
00148 
00149     result = (usage.ru_utime.tv_sec & 0x0FFFF) + usage.ru_utime.tv_usec * 1e-6;
00150     if (addSystem)
00151         result += (usage.ru_stime.tv_sec & 0x0FFFF) + usage.ru_stime.tv_usec * 1e-6;
00152 
00153     return(result);
00154 }
00155 
00156 #endif

Generated at Sat Aug 5 00:16:33 2000 for Class Library by doxygen 1.1.0 written by Dimitri van Heesch, © 1997-2000