Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Data / System / Data / ProviderBase / TimeoutTimer.cs / 1305376 / TimeoutTimer.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // // // Class used to manage timeouts in complex system operations. // //[....] //[....] //----------------------------------------------------------------------------- namespace System.Data.ProviderBase { using System; using System.Data.Common; using System.Diagnostics; // Purpose: // Manages determining and tracking timeouts // // Intended use: // Call StartXXXXTimeout() to get a timer with the given expiration point // Get remaining time in appropriate format to pass to subsystem timeouts // Check for timeout via IsExpired for checks in managed code. // Simply abandon to GC when done. internal class TimeoutTimer { //------------------- // Fields //------------------- private long _timerExpire; private bool _isInfiniteTimeout; //------------------- // Timeout-setting methods //------------------- // Get a new timer that will expire in the given number of seconds // For input, a value of zero seconds indicates infinite timeout internal static TimeoutTimer StartSecondsTimeout(int seconds) { //-------------------- // Preconditions: None (seconds must conform to SetTimeoutSeconds requirements) //-------------------- // Method body var timeout = new TimeoutTimer(); timeout.SetTimeoutSeconds(seconds); //--------------------- // Postconditions Debug.Assert(timeout != null); // Need a valid timeouttimer if no error return timeout; } #if !ORACLE // Get a new timer that will expire in the given number of milliseconds // No current need to support infinite milliseconds timeout internal static TimeoutTimer StartMillisecondsTimeout(long milliseconds) { //-------------------- // Preconditions Debug.Assert(0 <= milliseconds); //-------------------- // Method body var timeout = new TimeoutTimer(); timeout._timerExpire = checked(ADP.TimerCurrent() + (milliseconds * TimeSpan.TicksPerMillisecond)); timeout._isInfiniteTimeout = false; //--------------------- // Postconditions Debug.Assert(timeout != null); // Need a valid timeouttimer if no error return timeout; } #endif //------------------- // Methods for changing timeout //------------------- internal void SetTimeoutSeconds(int seconds) { //-------------------- // Preconditions Debug.Assert(0 <= seconds || InfiniteTimeout == seconds); // no need to support negative seconds at present //-------------------- // Method body if (InfiniteTimeout == seconds) { _isInfiniteTimeout = true; } else { // Stash current time + timeout _timerExpire = checked(ADP.TimerCurrent() + ADP.TimerFromSeconds(seconds)); _isInfiniteTimeout = false; } //--------------------- // Postconditions:None } //------------------- // Timeout info properties //------------------- // Indicator for infinite timeout when starting a timer internal static readonly long InfiniteTimeout = 0; // Is this timer in an expired state? internal bool IsExpired { get { return !IsInfinite && ADP.TimerHasExpired(_timerExpire); } } // is this an infinite-timeout timer? internal bool IsInfinite { get { return _isInfiniteTimeout; } } // Special accessor for TimerExpire for use when thunking to legacy timeout methods. internal long LegacyTimerExpire { get { return (_isInfiniteTimeout) ? Int64.MaxValue : _timerExpire; } } // Returns milliseconds remaining trimmed to zero for none remaining // and long.MaxValue for infinite // This method should be prefered for internal calculations that are not // yet common enough to code into the TimeoutTimer class itself. internal long MillisecondsRemaining { get { //------------------- // Preconditions: None //------------------- // Method Body long milliseconds; if (_isInfiniteTimeout) { milliseconds = long.MaxValue; } else { milliseconds = ADP.TimerRemainingMilliseconds(_timerExpire); if (0 > milliseconds) { milliseconds = 0; } } //-------------------- // Postconditions Debug.Assert(0<=milliseconds); // This property guarantees no negative return values return milliseconds; } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // // // Class used to manage timeouts in complex system operations. // //[....] //[....] //----------------------------------------------------------------------------- namespace System.Data.ProviderBase { using System; using System.Data.Common; using System.Diagnostics; // Purpose: // Manages determining and tracking timeouts // // Intended use: // Call StartXXXXTimeout() to get a timer with the given expiration point // Get remaining time in appropriate format to pass to subsystem timeouts // Check for timeout via IsExpired for checks in managed code. // Simply abandon to GC when done. internal class TimeoutTimer { //------------------- // Fields //------------------- private long _timerExpire; private bool _isInfiniteTimeout; //------------------- // Timeout-setting methods //------------------- // Get a new timer that will expire in the given number of seconds // For input, a value of zero seconds indicates infinite timeout internal static TimeoutTimer StartSecondsTimeout(int seconds) { //-------------------- // Preconditions: None (seconds must conform to SetTimeoutSeconds requirements) //-------------------- // Method body var timeout = new TimeoutTimer(); timeout.SetTimeoutSeconds(seconds); //--------------------- // Postconditions Debug.Assert(timeout != null); // Need a valid timeouttimer if no error return timeout; } #if !ORACLE // Get a new timer that will expire in the given number of milliseconds // No current need to support infinite milliseconds timeout internal static TimeoutTimer StartMillisecondsTimeout(long milliseconds) { //-------------------- // Preconditions Debug.Assert(0 <= milliseconds); //-------------------- // Method body var timeout = new TimeoutTimer(); timeout._timerExpire = checked(ADP.TimerCurrent() + (milliseconds * TimeSpan.TicksPerMillisecond)); timeout._isInfiniteTimeout = false; //--------------------- // Postconditions Debug.Assert(timeout != null); // Need a valid timeouttimer if no error return timeout; } #endif //------------------- // Methods for changing timeout //------------------- internal void SetTimeoutSeconds(int seconds) { //-------------------- // Preconditions Debug.Assert(0 <= seconds || InfiniteTimeout == seconds); // no need to support negative seconds at present //-------------------- // Method body if (InfiniteTimeout == seconds) { _isInfiniteTimeout = true; } else { // Stash current time + timeout _timerExpire = checked(ADP.TimerCurrent() + ADP.TimerFromSeconds(seconds)); _isInfiniteTimeout = false; } //--------------------- // Postconditions:None } //------------------- // Timeout info properties //------------------- // Indicator for infinite timeout when starting a timer internal static readonly long InfiniteTimeout = 0; // Is this timer in an expired state? internal bool IsExpired { get { return !IsInfinite && ADP.TimerHasExpired(_timerExpire); } } // is this an infinite-timeout timer? internal bool IsInfinite { get { return _isInfiniteTimeout; } } // Special accessor for TimerExpire for use when thunking to legacy timeout methods. internal long LegacyTimerExpire { get { return (_isInfiniteTimeout) ? Int64.MaxValue : _timerExpire; } } // Returns milliseconds remaining trimmed to zero for none remaining // and long.MaxValue for infinite // This method should be prefered for internal calculations that are not // yet common enough to code into the TimeoutTimer class itself. internal long MillisecondsRemaining { get { //------------------- // Preconditions: None //------------------- // Method Body long milliseconds; if (_isInfiniteTimeout) { milliseconds = long.MaxValue; } else { milliseconds = ADP.TimerRemainingMilliseconds(_timerExpire); if (0 > milliseconds) { milliseconds = 0; } } //-------------------- // Postconditions Debug.Assert(0<=milliseconds); // This property guarantees no negative return values return milliseconds; } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- KeyPullup.cs
- ChangeDirector.cs
- ListViewEditEventArgs.cs
- UTF7Encoding.cs
- FilterException.cs
- DataGridTextBox.cs
- LingerOption.cs
- RestHandler.cs
- XamlFigureLengthSerializer.cs
- CultureInfo.cs
- CodeTypeReferenceExpression.cs
- ClipboardData.cs
- EntityClientCacheEntry.cs
- TemplateBindingExtensionConverter.cs
- RoutedEventHandlerInfo.cs
- JapaneseLunisolarCalendar.cs
- MergeFailedEvent.cs
- StringOutput.cs
- ServiceNotStartedException.cs
- ObfuscationAttribute.cs
- ThreadStateException.cs
- XmlReader.cs
- BamlWriter.cs
- IgnoreFileBuildProvider.cs
- DesignerActionItem.cs
- _WebProxyDataBuilder.cs
- ObjectMemberMapping.cs
- DataServiceRequest.cs
- ToolbarAUtomationPeer.cs
- TextWriterTraceListener.cs
- FileUpload.cs
- MethodBuilder.cs
- ZipFileInfoCollection.cs
- HttpModuleCollection.cs
- FontInfo.cs
- XmlReturnReader.cs
- XmlDataLoader.cs
- ComplexPropertyEntry.cs
- ServiceModelReg.cs
- EmbossBitmapEffect.cs
- ErrorWrapper.cs
- CqlBlock.cs
- Vertex.cs
- Base64Encoding.cs
- WebExceptionStatus.cs
- DrawingContextWalker.cs
- PrincipalPermission.cs
- Dictionary.cs
- X509AsymmetricSecurityKey.cs
- BitmapEffectCollection.cs
- TypeName.cs
- NavigatingCancelEventArgs.cs
- DBConnectionString.cs
- Permission.cs
- ByteConverter.cs
- SafePEFileHandle.cs
- LinkedResource.cs
- WebPartConnectionsCancelEventArgs.cs
- WebPartEditorApplyVerb.cs
- GlyphTypeface.cs
- FlowDocumentScrollViewer.cs
- PropertySourceInfo.cs
- ITreeGenerator.cs
- NTAccount.cs
- Lookup.cs
- AssemblyNameProxy.cs
- MenuItemStyleCollection.cs
- DirectionalAction.cs
- XhtmlBasicTextBoxAdapter.cs
- Label.cs
- TypeSemantics.cs
- CharUnicodeInfo.cs
- ConfigurationPermission.cs
- TemplateInstanceAttribute.cs
- DictionaryBase.cs
- TimeZoneInfo.cs
- ArithmeticException.cs
- CodeIndexerExpression.cs
- XPathPatternParser.cs
- TextElementEnumerator.cs
- ProcessModelSection.cs
- XPathPatternBuilder.cs
- CharUnicodeInfo.cs
- FramingChannels.cs
- AssemblyCache.cs
- WhileDesigner.cs
- MobileUserControlDesigner.cs
- IssuanceLicense.cs
- ZipIOEndOfCentralDirectoryBlock.cs
- CodeExporter.cs
- MarshalByValueComponent.cs
- CodeDomComponentSerializationService.cs
- MinimizableAttributeTypeConverter.cs
- ToggleButton.cs
- WebBrowserDocumentCompletedEventHandler.cs
- RoleService.cs
- FontEditor.cs
- MemberListBinding.cs
- QueryCreatedEventArgs.cs
- BulletedListEventArgs.cs