]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/stopwatch.h
using Run of base class
[wxWidgets.git] / include / wx / stopwatch.h
index 583c75a495242563f9db20f11fc9c3e54746437e..248f757520b6def737f6f56b4bcd0ae779d99b98 100644 (file)
@@ -1,10 +1,11 @@
 /////////////////////////////////////////////////////////////////////////////
 // Name:        wx/stopwatch.h
 // Purpose:     wxStopWatch and global time-related functions
-// Author:      Julian Smart (wxTimer), Sylvain Bougnoux (wxStopWatch)
+// Author:      Julian Smart (wxTimer), Sylvain Bougnoux (wxStopWatch),
+//              Vadim Zeitlin (time functions, current wxStopWatch)
 // Created:     26.06.03 (extracted from wx/timer.h)
-// RCS-ID:      $Id$
 // Copyright:   (c) 1998-2003 Julian Smart, Sylvain Bougnoux
+//              (c) 2011 Vadim Zeitlin
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
 #include "wx/defs.h"
 #include "wx/longlong.h"
 
+// Time-related functions are also available via this header for compatibility
+// but you should include wx/time.h directly if you need only them and not
+// wxStopWatch itself.
+#include "wx/time.h"
+
 // ----------------------------------------------------------------------------
 // wxStopWatch: measure time intervals with up to 1ms resolution
 // ----------------------------------------------------------------------------
@@ -26,39 +32,56 @@ public:
     // ctor starts the stop watch
     wxStopWatch() { m_pauseCount = 0; Start(); }
 
-    // start the stop watch at the moment t0
+    // Start the stop watch at the moment t0 expressed in milliseconds (i.e.
+    // calling Time() immediately afterwards returns t0). This can be used to
+    // restart an existing stopwatch.
     void Start(long t0 = 0);
 
     // pause the stop watch
     void Pause()
     {
         if ( m_pauseCount++ == 0 )
-            m_pause = GetElapsedTime();
+            m_elapsedBeforePause = GetCurrentClockValue() - m_t0;
     }
 
     // resume it
     void Resume()
     {
         wxASSERT_MSG( m_pauseCount > 0,
-                      _T("Resuming stop watch which is not paused") );
+                      wxT("Resuming stop watch which is not paused") );
 
         if ( --m_pauseCount == 0 )
-            Start(m_pause);
+        {
+            DoStart();
+            m_t0 -= m_elapsedBeforePause;
+        }
     }
 
-    // get elapsed time since the last Start() in milliseconds
-    long Time() const;
+    // Get elapsed time since the last Start() in microseconds.
+    wxLongLong TimeInMicro() const;
 
-protected:
-    // returns the elapsed time since t0
-    long GetElapsedTime() const;
+    // get elapsed time since the last Start() in milliseconds
+    long Time() const { return (TimeInMicro()/1000).ToLong(); }
 
 private:
-    // the time of the last Start()
+    // Really starts the stop watch. The initial time is set to current clock
+    // value.
+    void DoStart();
+
+    // Returns the current clock value in its native units.
+    wxLongLong GetCurrentClockValue() const;
+
+    // Return the frequency of the clock used in its ticks per second.
+    wxLongLong GetClockFreq() const;
+
+
+    // The clock value when the stop watch was last started. Its units vary
+    // depending on the platform.
     wxLongLong m_t0;
 
-    // the time of the last Pause() (only valid if m_pauseCount > 0)
-    long m_pause;
+    // The elapsed time as of last Pause() call (only valid if m_pauseCount >
+    // 0) in the same units as m_t0.
+    wxLongLong m_elapsedBeforePause;
 
     // if > 0, the stop watch is paused, otherwise it is running
     int m_pauseCount;
@@ -78,37 +101,4 @@ private:
 
 #endif // wxUSE_LONGLONG && WXWIN_COMPATIBILITY_2_6
 
-// ----------------------------------------------------------------------------
-// global time functions
-// ----------------------------------------------------------------------------
-
-// Get number of seconds since local time 00:00:00 Jan 1st 1970.
-extern long WXDLLIMPEXP_BASE wxGetLocalTime();
-
-// Get number of seconds since GMT 00:00:00, Jan 1st 1970.
-extern long WXDLLIMPEXP_BASE wxGetUTCTime();
-
-#if wxUSE_LONGLONG
-    typedef wxLongLong wxMilliClock_t;
-    inline long wxMilliClockToLong(wxLongLong ll) { return ll.ToLong(); }
-#else
-    typedef double wxMilliClock_t;
-    inline long wxMilliClockToLong(double d) { return wx_truncate_cast(long, d); }
-#endif // wxUSE_LONGLONG
-
-// Get number of milliseconds since local time 00:00:00 Jan 1st 1970
-extern wxMilliClock_t WXDLLIMPEXP_BASE wxGetLocalTimeMillis();
-
-#define wxGetCurrentTime() wxGetLocalTime()
-
-// on some really old systems gettimeofday() doesn't have the second argument,
-// define wxGetTimeOfDay() to hide this difference
-#ifdef HAVE_GETTIMEOFDAY
-    #ifdef WX_GETTIMEOFDAY_NO_TZ
-        #define wxGetTimeOfDay(tv)      gettimeofday(tv)
-    #else
-        #define wxGetTimeOfDay(tv)      gettimeofday((tv), NULL)
-    #endif
-#endif // HAVE_GETTIMEOFDAY
-
 #endif // _WX_STOPWATCH_H_