112 lines
3.1 KiB
C++
112 lines
3.1 KiB
C++
|
//+---------------------------------------------------------------------------
|
||
|
//
|
||
|
// 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
|
||
|
}
|