159 lines
3.9 KiB
C++
159 lines
3.9 KiB
C++
|
#include "precomp.h"
|
||
|
#include "fsdiag.h"
|
||
|
DEBUG_FILEZONE(ZONE_T120_GCCNC);
|
||
|
/*
|
||
|
* alarm.cpp
|
||
|
*
|
||
|
* Copyright (c) 1995 by Databeam Corporation, Lexington, KY
|
||
|
*
|
||
|
* Abstract:
|
||
|
* This is the implementation file for the Alarm class. Objects of this
|
||
|
* class are used when the creator wishes to make sure that a certain
|
||
|
* activity doesn't exceed a certain amount of time.
|
||
|
*
|
||
|
* By convention, an Alarm object is created with the time limitation
|
||
|
* passed in as the only parameter to the constructor. The creator can
|
||
|
* then periodically ask the Alarm object if it has expired. This hides
|
||
|
* all time maintenance code from the creator.
|
||
|
*
|
||
|
* Note that the Alarm class is PASSIVE, meaning that it will not call
|
||
|
* back into its creator when the specified time is exceeded. This
|
||
|
* capability could be added at a future data. if desirable. Right now,
|
||
|
* the creator MUST call into an Alarm object to ask it if it has expired.
|
||
|
*
|
||
|
* Private Data:
|
||
|
* Duration
|
||
|
* This refers to the original duration of the alarm. It is kept
|
||
|
* around to allow the creator to reset the alarm without having to
|
||
|
* respecify the duration.
|
||
|
* Expiration_Time
|
||
|
* This is the time (in clock ticks) upon which the alarm will expire.
|
||
|
* Whenever the alarm is asked if it has expired, it checks the current
|
||
|
* system clock against this value.
|
||
|
* Expired
|
||
|
* This is a boolean flag that indicates whether or not the alarm has
|
||
|
* already expired. This prevents the object from repeatedly checking
|
||
|
* the system clock if the timer has already expired.
|
||
|
*
|
||
|
* Caveats:
|
||
|
* None
|
||
|
*
|
||
|
* Author:
|
||
|
* James P. Galvin, Jr.
|
||
|
*
|
||
|
* Revision History:
|
||
|
* 09JAN95 jpg Original
|
||
|
*/
|
||
|
|
||
|
#include "alarm.h"
|
||
|
|
||
|
|
||
|
/*
|
||
|
* Alarm ()
|
||
|
*
|
||
|
* Public
|
||
|
*
|
||
|
* Function Description
|
||
|
* This is the constructor for the Alarm class. It calls Set to initialize
|
||
|
* all instance variables, and calculate the first expiration time value
|
||
|
* based on the specified duration.
|
||
|
*/
|
||
|
CAlarm::CAlarm(UINT nDuration)
|
||
|
{
|
||
|
Set(nDuration);
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
* ~Alarm ()
|
||
|
*
|
||
|
* Public
|
||
|
*
|
||
|
* Function Description
|
||
|
* This is the destructor for the Alarm class. It currently does nothing.
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
* void Set ()
|
||
|
*
|
||
|
* Public
|
||
|
*
|
||
|
* Function Description
|
||
|
* This function initializes the alarm duration instance variable and
|
||
|
* calls Reset to ready the alarm for use.
|
||
|
*/
|
||
|
void CAlarm::Set(UINT nDuration)
|
||
|
{
|
||
|
m_nDuration = nDuration;
|
||
|
|
||
|
/*
|
||
|
* Call Reset to initialize remaining instance variables and ready the
|
||
|
* alarm for use.
|
||
|
*/
|
||
|
Reset();
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
* void Reset ()
|
||
|
*
|
||
|
* Public
|
||
|
*
|
||
|
* Function Description
|
||
|
* This function calculate an expiration time value based on the specified
|
||
|
* duration and marks the alarm as unexpired.
|
||
|
*/
|
||
|
void CAlarm::Reset(void)
|
||
|
{
|
||
|
/*
|
||
|
* Determine the expiration time by adding the alarm duration to the
|
||
|
* current time.
|
||
|
*/
|
||
|
m_nStartTime = (UINT) ::GetTickCount();
|
||
|
m_fExpired = FALSE;
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
* void Expire ()
|
||
|
*
|
||
|
* Public
|
||
|
*
|
||
|
* Function Description
|
||
|
* This function can be used to expire an alarm prematurely. This might
|
||
|
* be useful if the alarm is used to determine whether or not to perform
|
||
|
* an action, and the caller decides to inhibit the action for reasons
|
||
|
* other than time.
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
* BOOL IsExpired ()
|
||
|
*
|
||
|
* Public
|
||
|
*
|
||
|
* Function Description
|
||
|
* This function is used to check an alarm to see if it has expired.
|
||
|
*/
|
||
|
BOOL CAlarm::IsExpired(void)
|
||
|
{
|
||
|
/*
|
||
|
* See if the alarm has already expired before checking it again.
|
||
|
*/
|
||
|
// LONCHANC: The alarm object is totally bogus. We check for expiration
|
||
|
// only when we are sending a PDU out. However, when it expires, it is
|
||
|
// possible that there is no PDU to send. In this case, no one will know
|
||
|
// this alarm is expired. This means some actions will not be taken in time.
|
||
|
// Now, make it always expired because it did not work at all before and
|
||
|
// most of time it returned "expired."
|
||
|
#if 1
|
||
|
m_fExpired = TRUE;
|
||
|
#else
|
||
|
if (! m_fExpired)
|
||
|
{
|
||
|
if (m_nStartTime + m_nDuration <= (UINT) ::GetTickCount())
|
||
|
{
|
||
|
m_fExpired = TRUE;
|
||
|
}
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
return m_fExpired;
|
||
|
}
|