windows-nt/Source/XPSP1/NT/inetsrv/query/h/timlimit.hxx

112 lines
3.1 KiB
C++
Raw Normal View History

2020-09-26 03:20:57 -05:00
//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1996-2000.
//
// File: timlimit.hxx
//
// Contents: Class to monitor execution time of a query
//
// Classes: CTimeLimit
//
// History: 09 Jul 1996 AlanW Created
//
//----------------------------------------------------------------------------
#pragma once
//+---------------------------------------------------------------------------
//
// Class: CTimeLimit
//
// Purpose: Monitor elapsed execution time of a query
//
// History: 09 Jul 1996 AlanW Created
//
//----------------------------------------------------------------------------
class CTimeLimit
{
public:
CTimeLimit( ULONG ulMaxExecutionTime, ULONG ulMaxTimeOverride );
CTimeLimit( CTimeLimit & TimeLim ) :
_ullExecutionTimeLimit( TimeLim._ullExecutionTimeLimit ),
_ullBaselineTime( TimeLim._ullBaselineTime ),
_fDisableCheck( TimeLim._fDisableCheck )
{ }
void SetBaselineTime( );
inline void SetMaxOverrideTime( ULONG ulMaxTimeOverride );
BOOL CheckExecutionTime( ULONGLONG *pullTimeslice = 0 );
void DisableCheck() { _fDisableCheck = TRUE; }
void EnableCheck() { _fDisableCheck = FALSE; }
BOOL CheckDisabled() { return _fDisableCheck; }
void SetExecutionTime( ULONGLONG ullExecutionTimeLimit ) { _ullExecutionTimeLimit = ullExecutionTimeLimit; }
BOOL IsTimedOut( ) { return _fDisableCheck ? FALSE : ( _ullExecutionTimeLimit == 0 ); }
BOOL IsNoTimeOut( ) { return ( _UI64_MAX == _ullExecutionTimeLimit ); }
private:
ULONGLONG _ullExecutionTimeLimit;// Execution time limit (100 nsec)
ULONGLONG _ullBaselineTime; // Execution time snapshot (100 nsec)
BOOL _fDisableCheck;
};
//+---------------------------------------------------------------------------
//
// Member: CTimeLimit::SetMaxOverrideTime, public
//
// Synopsis: Set a high-water mark for time limit
//
// Arguments: [ulMaxTimeOverride] - upper bound on ulExecutionTimeLimit (in msec)
//
// History: 22-Jan-1998 KyleP Created
//
// Note: Calling this method *after* the first call to CheckExecutionTime
// will result in some time potentially being uncounted between
// construction and the call to SetMaxOverrideTime.
//
//----------------------------------------------------------------------------
inline void CTimeLimit::SetMaxOverrideTime( ULONG ulMaxTimeOverride )
{
#if CIDBG == 1
//
// Undo artificial increment, just to make computation more straightforward.
//
if ( ciInfoLevel > 7 || vqInfoLevel > 7)
{
if (_UI64_MAX != _ullExecutionTimeLimit)
_ullExecutionTimeLimit /= 50;
}
#endif
if ( ulMaxTimeOverride > 0 )
_ullExecutionTimeLimit = min( _ullExecutionTimeLimit, ulMaxTimeOverride * 10000 );
#if DBG || CIDBG
//
// Debugs are time-costly...
//
if ( ciInfoLevel > 7 || vqInfoLevel > 7 )
{
if (_UI64_MAX != _ullExecutionTimeLimit)
_ullExecutionTimeLimit *= 50;
}
#endif // DBG || CIDBG
}