Code:
/ 4.0 / 4.0 / untmp / 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- RawStylusInputCustomData.cs
- UncommonField.cs
- ReadContentAsBinaryHelper.cs
- DataServiceContext.cs
- ModelUIElement3D.cs
- TraceProvider.cs
- ConsumerConnectionPoint.cs
- ComboBox.cs
- SmtpFailedRecipientException.cs
- TraceUtility.cs
- KeyboardEventArgs.cs
- SecurityCriticalDataForSet.cs
- ClientConfigPaths.cs
- ExpressionConverter.cs
- DateTimeUtil.cs
- CallbackValidator.cs
- BinaryFormatterWriter.cs
- StorageAssociationSetMapping.cs
- RubberbandSelector.cs
- CompositeDataBoundControl.cs
- WebPartMovingEventArgs.cs
- MatrixValueSerializer.cs
- FileDialogCustomPlace.cs
- Pool.cs
- DataSet.cs
- ControlParameter.cs
- CookielessHelper.cs
- BamlReader.cs
- cryptoapiTransform.cs
- ClientEventManager.cs
- FilterableAttribute.cs
- TextBoxLine.cs
- Buffer.cs
- CommandID.cs
- QuotedPrintableStream.cs
- XmlCodeExporter.cs
- Missing.cs
- ToolStripLabel.cs
- XMLSchema.cs
- FastPropertyAccessor.cs
- UniqueConstraint.cs
- DataObjectEventArgs.cs
- XmlSchemaSubstitutionGroup.cs
- Visual3D.cs
- RuleSettingsCollection.cs
- CallbackValidatorAttribute.cs
- RecognizedAudio.cs
- DataObject.cs
- ControlBuilderAttribute.cs
- NavigationProperty.cs
- MoveSizeWinEventHandler.cs
- ProgressPage.cs
- AttachedPropertyMethodSelector.cs
- CodeDomLoader.cs
- DebugControllerThread.cs
- LongValidator.cs
- IntranetCredentialPolicy.cs
- AssociationEndMember.cs
- ResourceIDHelper.cs
- ToolboxItemFilterAttribute.cs
- ComplexTypeEmitter.cs
- ByteConverter.cs
- DesignParameter.cs
- WebControlsSection.cs
- SiteMapNodeItemEventArgs.cs
- WorkflowPersistenceService.cs
- ConfigsHelper.cs
- DelegateSerializationHolder.cs
- CLSCompliantAttribute.cs
- WindowsStatusBar.cs
- Convert.cs
- _NetworkingPerfCounters.cs
- panel.cs
- DataGridViewCellEventArgs.cs
- WaitHandleCannotBeOpenedException.cs
- CalendarSelectionChangedEventArgs.cs
- LocatorPart.cs
- HierarchicalDataBoundControlAdapter.cs
- QilBinary.cs
- UnsafeNativeMethods.cs
- NullableLongSumAggregationOperator.cs
- ImmutableObjectAttribute.cs
- PropertyOverridesTypeEditor.cs
- DrawTreeNodeEventArgs.cs
- SchemaNamespaceManager.cs
- securitycriticaldataClass.cs
- MappingItemCollection.cs
- CuspData.cs
- EventLogTraceListener.cs
- PropertyEmitter.cs
- PictureBox.cs
- BinaryReader.cs
- CorrelationValidator.cs
- CorrelationManager.cs
- _TransmitFileOverlappedAsyncResult.cs
- WindowsStreamSecurityBindingElement.cs
- ConnectionInterfaceCollection.cs
- MonitoringDescriptionAttribute.cs
- StreamedWorkflowDefinitionContext.cs
- KernelTypeValidation.cs