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.
 
 
 
 
 
 

304 lines
7.7 KiB

/**********************************************************************/
/** 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_