• Main Page
  • Namespaces
  • Classes
  • Files
  • File List
  • File Members

hrtimer.h

00001 #ifndef CRYPTOPP_HRTIMER_H
00002 #define CRYPTOPP_HRTIMER_H
00003 
00004 #include "config.h"
00005 #ifndef HIGHRES_TIMER_AVAILABLE
00006 #include <time.h>
00007 #endif
00008 
00009 NAMESPACE_BEGIN(CryptoPP)
00010 
00011 #ifdef HIGHRES_TIMER_AVAILABLE
00012         typedef word64 TimerWord;
00013 #else
00014         typedef clock_t TimerWord;
00015 #endif
00016 
00017 //! _
00018 class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE TimerBase
00019 {
00020 public:
00021         enum Unit {SECONDS = 0, MILLISECONDS, MICROSECONDS, NANOSECONDS};
00022         TimerBase(Unit unit, bool stuckAtZero)  : m_timerUnit(unit), m_stuckAtZero(stuckAtZero), m_started(false) {}
00023 
00024         virtual TimerWord GetCurrentTimerValue() =0;    // GetCurrentTime is a macro in MSVC 6.0
00025         virtual TimerWord TicksPerSecond() =0;  // this is not the resolution, just a conversion factor into seconds
00026 
00027         void StartTimer();
00028         double ElapsedTimeAsDouble();
00029         unsigned long ElapsedTime();
00030 
00031 private:
00032         double ConvertTo(TimerWord t, Unit unit);
00033 
00034         Unit m_timerUnit;       // HPUX workaround: m_unit is a system macro on HPUX
00035         bool m_stuckAtZero, m_started;
00036         TimerWord m_start, m_last;
00037 };
00038 
00039 //! measure CPU time spent executing instructions of this thread (if supported by OS)
00040 /*! /note This only works correctly on Windows NT or later. On Unix it reports process time, and others wall clock time.
00041 */
00042 class ThreadUserTimer : public TimerBase
00043 {
00044 public:
00045         ThreadUserTimer(Unit unit = TimerBase::SECONDS, bool stuckAtZero = false)       : TimerBase(unit, stuckAtZero) {}
00046         TimerWord GetCurrentTimerValue();
00047         TimerWord TicksPerSecond();
00048 };
00049 
00050 //! high resolution timer
00051 class CRYPTOPP_DLL Timer : public TimerBase
00052 {
00053 public:
00054         Timer(Unit unit = TimerBase::SECONDS, bool stuckAtZero = false) : TimerBase(unit, stuckAtZero) {}
00055         TimerWord GetCurrentTimerValue();
00056         TimerWord TicksPerSecond();
00057 };
00058 
00059 NAMESPACE_END
00060 
00061 #endif

Generated on Mon Aug 9 2010 15:56:34 for Crypto++ by  doxygen 1.7.1