Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/**********************************************************************/ /** Microsoft Windows/NT **/ /** Copyright(c) Microsoft Corp., 1991 **/ /**********************************************************************/
/*
blttm.hxx BLT timer multiplexer object header file.
FILE HISTORY: terryk 29-May-91 Created terryk 18-Jul-91 Code review changes. Attend: terryk jonn ericch rustanl 10-Sep-91 Large changes, introducing new timer hierarchy beng 04-Oct-1991 Relocated type TIMER_ID to bltglob KeithMo 23-Oct-1991 Added forward references. */
#ifndef _BLTTM_HXX_
#define _BLTTM_HXX_
#include "slist.hxx"
//
// Forward references.
//
DLL_CLASS BLT_MASTER_TIMER; DLL_CLASS TIMER_BASE; DLL_CLASS TIMER_WINDOW; DLL_CLASS WINDOW_TIMER; DLL_CLASS PROC_TIMER; DLL_CLASS TIMER_CALLOUT; DLL_CLASS TIMER;
DECL_SLIST_OF( TIMER_BASE, DLL_BASED );
/**********************************************************\
NAME: BLT_MASTER_TIMER
SYNOPSIS: Master timer. It consists of a set of function to control the list of timer.
INTERFACE: Init() - initialize the master timer Term() - terminate the master timer
ResetIterator() - reset the link list to the first timer NextTimer() - return the next timer in the link list. RemoveTimer() - remove the given timer from the link list Insert() - insert the given timer to the link list by using insertion method. ClearMasterHotkey() - clears hotkey (if any) associated with invisible master timer window and returns vkey code (NULL if none).
PARENT: BASE
USES: SLIST, ITER, TIMER_BASE
CAVEATS: In order to use the package, the programmer should called BLT_MASTER_TIMER's Init function. He/she should also called the Term function at the end of the application.
HISTORY: terryk 1-Jun-91 Created terryk 18-Jul-91 Change the name of the functions to ResetIterator and NextTimer rustanl 09-Sep-1991 Changed Init return code and made use of it jonn 05-Jul-95 ClearMasterHotkey
\**********************************************************/
DLL_CLASS BLT_MASTER_TIMER: public BASE { private: SLIST_OF( TIMER_BASE ) _slTimer; // singly linked list of timers
ITER_SL_OF( TIMER_BASE ) _iterTimer; // iterator for the timer list
UINT_PTR _wTimerId; // the system timer id
TIMER_WINDOW * _pclwinTimerApp; // pointer to window which receives
// OnTimer calls, triggering the
// master timer
static BLT_MASTER_TIMER * _pBltMasterTimer; // pointer to THE master timer;
// initialized in Init.
public: static APIERR Init(); // initialize the master timer
static VOID Term(); // destroy the master timer
BLT_MASTER_TIMER(); ~BLT_MASTER_TIMER();
VOID ResetIterator(); TIMER_BASE * NextTimer();
APIERR InsertTimer( TIMER_BASE * pTimer ); VOID RemoveTimer( TIMER_BASE * pTimer );
static APIERR QueryMasterTimer( BLT_MASTER_TIMER * * ppmastertimer ); static ULONG ClearMasterTimerHotkey(); };
/**********************************************************\
NAME: TIMER_BASE
SYNOPSIS: This object will multiplex the window's system timer.
INTERFACE: TIMER_BASE() - constructor ~TIMER_BASE() - destructor
Enable() - Enable or disable the timer IsEnabled() - Returns whether the timer is enabled
PARENT: BASE
USE: BLT_MASTER_TIMER
CAVEATS: The programmer should call BLT_MASTER_TIMER initialize first. The programmer should also call BLT_MASTER_TIMER's Term at the end of the program to terminate the master timer.
HISTORY: terryk 1-Jun-91 Created terryk 18-Jul-91 Change the member variables to private rustanl 06-Sep-91 Changed name to TIMER_BASE, and created new timer class WINDOW_TIMER and PROC_TIMER.
\**********************************************************/
DLL_CLASS TIMER_BASE: public BASE { friend class BLT_MASTER_TIMER; friend class TIMER_WINDOW;
private: BOOL _fEnabled; // Whether or not the timer is enabled
ULONG _msInterval; // interval at which the timer will activate
ULONG _ulNextTimerDue; // tick count at which next timer is due
BOOL _fBeingServed; // is timer being served
TIMER_ID _tid; // timer ID
VOID SetNewTimeDue(); // sets _ulNextTimerDue to new value
protected: virtual VOID DispatchTimer();
public: TIMER_BASE( ULONG msInterval, BOOL fEnabled = TRUE ); ~TIMER_BASE();
VOID Enable( BOOL fEnable ); // Enables or disables the timer
BOOL IsEnabled() const { return ( _fEnabled ); }
VOID TriggerNow(); // Forces a timer.
TIMER_ID QueryID() const { return _tid; } };
/*************************************************************************
NAME: WINDOW_TIMER
SYNOPSIS: Timer which calls out to a window
INTERFACE: WINDOW_TIMER() - Constructor
PARENT: TIMER_BASE
HISTORY: rustanl 06-Sep-1991 Created from previous BLT_TIMER class
**************************************************************************/
DLL_CLASS WINDOW_TIMER : public TIMER_BASE { private: HWND _hwnd; // window handle
BOOL _fPostMsg; // TRUE to post msg; FALSE to send msg
protected: virtual VOID DispatchTimer();
public: WINDOW_TIMER( HWND hwnd, ULONG msInterval, BOOL fEnabled = TRUE, BOOL fPostMsg = FALSE ); };
/*************************************************************************
NAME: PROC_TIMER
SYNOPSIS: Timer which calls out to a TimerProc
INTERFACE: PROC_TIMER() - Constructor
PARENT: TIMER_BASE
HISTORY: rustanl 06-Sep-1991 Created from previous BLT_TIMER class beng 17-Oct-1991 Win32 conversion
**************************************************************************/
DLL_CLASS PROC_TIMER : public TIMER_BASE { private: HWND _hwnd; MFARPROC _lpTimerFunc; // callback function
protected: virtual VOID DispatchTimer();
public: PROC_TIMER( HWND hwnd, MFARPROC lpTimerFunc, ULONG msInterval, BOOL fEnabled = TRUE ); };
/*************************************************************************
NAME: TIMER_CALLOUT
SYNOPSIS: Outlet for timer fires
INTERFACE: TIMER_CALLOUT() - Constructor
PARENT: BASE
NOTES: CODEWORK. The DISPATCHER::OnTimer method should be renamed something like OnWindowTimer, so as to disambiguate it from this method. Perhaps this method could also get a better name.
Note, don't confuse the OnTimerNotification method with the DISPATCHER::OnTimer method.
HISTORY: rustanl 05-Sep-1991 Created
**************************************************************************/
DLL_CLASS TIMER_CALLOUT : public BASE { friend class TIMER;
protected: virtual VOID OnTimerNotification( TIMER_ID tid );
public: TIMER_CALLOUT() {} };
/*************************************************************************
NAME: TIMER
SYNOPSIS: Timer which calls out to a TIMER_CALLOUT object
INTERFACE: TIMER() - Constructor
PARENT: TIMER_BASE
HISTORY: rustanl 06-Sep-1991 Created
**************************************************************************/
DLL_CLASS TIMER : public TIMER_BASE { private: TIMER_CALLOUT * _ptimercallout;
protected: virtual VOID DispatchTimer();
public: TIMER( TIMER_CALLOUT * ptimercallout, ULONG msInterval, BOOL fEnabled = TRUE ); };
#endif // _BLTTM_HXX_
|