| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- /////////////////////////////////////////////////////////////////////////////
- // Name: wx/unix/private/timer.h
- // Purpose: wxTimer for wxBase (unix)
- // Author: Lukasz Michalski
- // Created: 15/01/2005
- // Copyright: (c) Lukasz Michalski
- // Licence: wxWindows licence
- /////////////////////////////////////////////////////////////////////////////
- #ifndef _WX_UNIX_PRIVATE_TIMER_H_
- #define _WX_UNIX_PRIVATE_TIMER_H_
- #if wxUSE_TIMER
- #include "wx/private/timer.h"
- // the type used for milliseconds is large enough for microseconds too but
- // introduce a synonym for it to avoid confusion
- typedef wxMilliClock_t wxUsecClock_t;
- // ----------------------------------------------------------------------------
- // wxTimer implementation class for Unix platforms
- // ----------------------------------------------------------------------------
- // NB: we have to export at least this symbol from the shared library, because
- // it's used by wxDFB's wxCore
- class WXDLLIMPEXP_BASE wxUnixTimerImpl : public wxTimerImpl
- {
- public:
- wxUnixTimerImpl(wxTimer *timer);
- virtual ~wxUnixTimerImpl();
- virtual bool IsRunning() const;
- virtual bool Start(int milliseconds = -1, bool oneShot = false);
- virtual void Stop();
- // for wxTimerScheduler only: resets the internal flag indicating that the
- // timer is running
- void MarkStopped()
- {
- wxASSERT_MSG( m_isRunning, wxT("stopping non-running timer?") );
- m_isRunning = false;
- }
- private:
- bool m_isRunning;
- };
- // ----------------------------------------------------------------------------
- // wxTimerSchedule: information about a single timer, used by wxTimerScheduler
- // ----------------------------------------------------------------------------
- struct wxTimerSchedule
- {
- wxTimerSchedule(wxUnixTimerImpl *timer, wxUsecClock_t expiration)
- : m_timer(timer),
- m_expiration(expiration)
- {
- }
- // the timer itself (we don't own this pointer)
- wxUnixTimerImpl *m_timer;
- // the time of its next expiration, in usec
- wxUsecClock_t m_expiration;
- };
- // the linked list of all active timers, we keep it sorted by expiration time
- WX_DECLARE_LIST(wxTimerSchedule, wxTimerList);
- // ----------------------------------------------------------------------------
- // wxTimerScheduler: class responsible for updating all timers
- // ----------------------------------------------------------------------------
- class wxTimerScheduler
- {
- public:
- // get the unique timer scheduler instance
- static wxTimerScheduler& Get()
- {
- if ( !ms_instance )
- ms_instance = new wxTimerScheduler;
- return *ms_instance;
- }
- // must be called on shutdown to delete the global timer scheduler
- static void Shutdown()
- {
- if ( ms_instance )
- {
- delete ms_instance;
- ms_instance = NULL;
- }
- }
- // adds timer which should expire at the given absolute time to the list
- void AddTimer(wxUnixTimerImpl *timer, wxUsecClock_t expiration);
- // remove timer from the list, called automatically from timer dtor
- void RemoveTimer(wxUnixTimerImpl *timer);
- // the functions below are used by the event loop implementation to monitor
- // and notify timers:
- // if this function returns true, the time remaining until the next time
- // expiration is returned in the provided parameter (always positive or 0)
- //
- // it returns false if there are no timers
- bool GetNext(wxUsecClock_t *remaining) const;
- // trigger the timer event for all timers which have expired, return true
- // if any did
- bool NotifyExpired();
- private:
- // ctor and dtor are private, this is a singleton class only created by
- // Get() and destroyed by Shutdown()
- wxTimerScheduler() { }
- ~wxTimerScheduler();
- // add the given timer schedule to the list in the right place
- //
- // we take ownership of the pointer "s" which must be heap-allocated
- void DoAddTimer(wxTimerSchedule *s);
- // the list of all currently active timers sorted by expiration
- wxTimerList m_timers;
- static wxTimerScheduler *ms_instance;
- };
- #endif // wxUSE_TIMER
- #endif // _WX_UNIX_PRIVATE_TIMER_H_
|