]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/timer.h
Performance optimizations
[wxWidgets.git] / include / wx / timer.h
index 93d3f94f7c86bdfde09507c5006f3d8d8ce604d1..0a19282ecafae5bfad114e836db60e82ab3f7308 100644 (file)
+/////////////////////////////////////////////////////////////////////////////
+// Name:        wx/timer.h
+// Purpose:     wxTimer class and global time-related functions
+// Author:      Julian Smart
+// Modified by:
+// Created:     04/01/98
+// RCS-ID:      $Id$
+// Copyright:   (c) Julian Smart and Markus Holzem
+// Licence:    wxWindows license
+/////////////////////////////////////////////////////////////////////////////
+
 #ifndef _WX_TIMER_H_BASE_
 #define _WX_TIMER_H_BASE_
 
 #ifndef _WX_TIMER_H_BASE_
 #define _WX_TIMER_H_BASE_
 
+#ifdef __GNUG__
+    #pragma interface "timerbase.h"
+#endif
+
+#include "wx/object.h"
+
+// ----------------------------------------------------------------------------
+// wxTimer
+// ----------------------------------------------------------------------------
+
+// the interface of wxTimer class
+class WXDLLEXPORT wxTimerBase : public wxObject
+{
+public:
+    wxTimerBase() { m_oneShot = FALSE; m_milli = 0; }
+
+    // working with the timer
+    // ----------------------
+
+    // start the timer: if milliseconds == -1, use the same value as for the
+    // last Start()
+    virtual bool Start(int milliseconds = -1, bool oneShot = FALSE)
+    {
+        if ( milliseconds != -1 )
+        {
+            m_milli = milliseconds;
+        }
+
+        m_oneShot = oneShot;
+
+        return TRUE;
+    }
+
+
+    // stop the timer
+    virtual void Stop() = 0;
+
+    // override this in your wxTimer-derived class
+    virtual void Notify() = 0;
+
+    // getting info
+    // ------------
+
+    // return TRUE if the timer is running
+    virtual bool IsRunning() const = 0;
+
+    // get the (last) timer interval in the milliseconds
+    int GetInterval() const { return m_milli; }
+
+    // return TRUE if the timer is one shot
+    bool IsOneShot() const { return m_oneShot; }
+
+#if WXWIN_COMPATIBILITY_2
+    // deprecated functions
+    int Interval() const { return GetInterval(); };
+    bool OneShot() const { return IsOneShot(); }
+#endif // WXWIN_COMPATIBILITY_2
+
+protected:
+    int     m_milli;        // the timer interval
+    bool    m_oneShot;      // TRUE if one shot
+};
+
 #if defined(__WXMSW__)
 #if defined(__WXMSW__)
-#include "wx/msw/timer.h"
+    #include "wx/msw/timer.h"
 #elif defined(__WXMOTIF__)
 #elif defined(__WXMOTIF__)
-#include "wx/motif/timer.h"
+    #include "wx/motif/timer.h"
 #elif defined(__WXGTK__)
 #elif defined(__WXGTK__)
-#include "wx/gtk/timer.h"
+    #include "wx/gtk/timer.h"
 #elif defined(__WXQT__)
 #elif defined(__WXQT__)
-#include "wx/qt/timer.h"
+    #include "wx/qt/timer.h"
 #elif defined(__WXMAC__)
 #elif defined(__WXMAC__)
-#include "wx/mac/timer.h"
+    #include "wx/mac/timer.h"
 #elif defined(__WXPM__)
 #elif defined(__WXPM__)
-#include "wx/os2/timer.h"
+    #include "wx/os2/timer.h"
 #elif defined(__WXSTUBS__)
 #elif defined(__WXSTUBS__)
-#include "wx/stubs/timer.h"
+    #include "wx/stubs/timer.h"
 #endif
 
 #endif
 
-class wxChrono
+// ----------------------------------------------------------------------------
+// wxStopWatch
+// ----------------------------------------------------------------------------
+
+class WXDLLEXPORT wxStopWatch
 {
 public: 
 {
 public: 
-  wxChrono();
-  
-  void Start(long t=0);
-  void Pause();
-  void Resume();
+    // ctor starts the stop watch
+    wxStopWatch() { Start(); }
+
+    void Start(long t = 0); // (re)start it t milliseconds ago
+    inline void Pause();
+    void Resume() { Start(m_pause); }
 
 
-  long Time();
+    // get the elapsed time since the last Start() or Pause() in milliseconds
+    long Time() const;
 
 
+protected:
+    // returns the elapsed time since t0
+    inline long GetElapsedTime() const;
+    
 private:
 private:
-  long m_t0;
-  long m_pause;
+    long m_t0;          // the time of the last Start()
+    long m_pause;       // the time of the last Pause() or 0
 };
 
 };
 
-// Timer functions (milliseconds)
+// the old name
+#ifdef WXWIN_COMPATIBILITY_2
+    typedef wxStopWatch wxChrono;
+#endif // WXWIN_COMPATIBILITY_2
+
+// ----------------------------------------------------------------------------
+// global time functions
+// ----------------------------------------------------------------------------
+
+// Timer functions (milliseconds) -- use wxStopWatch instead
 void WXDLLEXPORT wxStartTimer();
 
 void WXDLLEXPORT wxStartTimer();
 
-// Gets time since last wxStartTimer or wxGetElapsedTime
+// Gets time since last wxStartTimer or wxGetElapsedTime -- use wxStopWatch
+// instead
 long WXDLLEXPORT wxGetElapsedTime(bool resetTimer = TRUE);
 
 long WXDLLEXPORT wxGetElapsedTime(bool resetTimer = TRUE);
 
-// EXPERIMENTAL: comment this out if it doesn't compile.
+// Get the local time
 bool WXDLLEXPORT wxGetLocalTime(long *timeZone, int *dstObserved);
 
 // Get number of seconds since 00:00:00 GMT, Jan 1st 1970.
 long WXDLLEXPORT wxGetCurrentTime();
 
 // Get number of milliseconds since 00:00:00 GMT, Jan 1st 1970.
 bool WXDLLEXPORT wxGetLocalTime(long *timeZone, int *dstObserved);
 
 // Get number of seconds since 00:00:00 GMT, Jan 1st 1970.
 long WXDLLEXPORT wxGetCurrentTime();
 
 // Get number of milliseconds since 00:00:00 GMT, Jan 1st 1970.
-long WXDLLEXPORT wxGetCurrentUTime();
+long WXDLLEXPORT wxGetCurrentMTime();
+
+// ----------------------------------------------------------------------------
+// inline functions
+// ----------------------------------------------------------------------------
+
+inline long wxStopWatch::GetElapsedTime() const
+{
+    return wxGetCurrentMTime() - m_t0;
+}
+
+inline void wxStopWatch::Pause()
+{
+    m_pause = GetElapsedTime();
+}
 
 #endif
     // _WX_TIMER_H_BASE_
 
 #endif
     // _WX_TIMER_H_BASE_