305 lines
7.7 KiB
C++
305 lines
7.7 KiB
C++
|
/**********************************************************************/
|
||
|
/** 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_
|