Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / System.Runtime.DurableInstancing / System / Runtime / TimeoutHelper.cs / 1305376 / TimeoutHelper.cs
//------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- namespace System.Runtime { using System; using System.Threading; struct TimeoutHelper { DateTime deadline; bool deadlineSet; TimeSpan originalTimeout; public static readonly TimeSpan MaxWait = TimeSpan.FromMilliseconds(Int32.MaxValue); public TimeoutHelper(TimeSpan timeout) { Fx.Assert(timeout >= TimeSpan.Zero, "timeout must be non-negative"); this.originalTimeout = timeout; this.deadline = DateTime.MaxValue; this.deadlineSet = (timeout == TimeSpan.MaxValue); } public TimeSpan OriginalTimeout { get { return this.originalTimeout; } } public static bool IsTooLarge(TimeSpan timeout) { return (timeout > TimeoutHelper.MaxWait) && (timeout != TimeSpan.MaxValue); } public static TimeSpan FromMilliseconds(int milliseconds) { if (milliseconds == Timeout.Infinite) { return TimeSpan.MaxValue; } else { return TimeSpan.FromMilliseconds(milliseconds); } } public static int ToMilliseconds(TimeSpan timeout) { if (timeout == TimeSpan.MaxValue) { return Timeout.Infinite; } else { long ticks = Ticks.FromTimeSpan(timeout); if (ticks / TimeSpan.TicksPerMillisecond > int.MaxValue) { return int.MaxValue; } return Ticks.ToMilliseconds(ticks); } } public static TimeSpan Min(TimeSpan val1, TimeSpan val2) { if (val1 > val2) { return val2; } else { return val1; } } public static TimeSpan Add(TimeSpan timeout1, TimeSpan timeout2) { return Ticks.ToTimeSpan(Ticks.Add(Ticks.FromTimeSpan(timeout1), Ticks.FromTimeSpan(timeout2))); } public static DateTime Add(DateTime time, TimeSpan timeout) { if (timeout >= TimeSpan.Zero && DateTime.MaxValue - time <= timeout) { return DateTime.MaxValue; } if (timeout <= TimeSpan.Zero && DateTime.MinValue - time >= timeout) { return DateTime.MinValue; } return time + timeout; } public static DateTime Subtract(DateTime time, TimeSpan timeout) { return Add(time, TimeSpan.Zero - timeout); } public static TimeSpan Divide(TimeSpan timeout, int factor) { if (timeout == TimeSpan.MaxValue) { return TimeSpan.MaxValue; } return Ticks.ToTimeSpan((Ticks.FromTimeSpan(timeout) / factor) + 1); } public TimeSpan RemainingTime() { if (!this.deadlineSet) { this.SetDeadline(); return this.originalTimeout; } else if (this.deadline == DateTime.MaxValue) { return TimeSpan.MaxValue; } else { TimeSpan remaining = this.deadline - DateTime.UtcNow; if (remaining <= TimeSpan.Zero) { return TimeSpan.Zero; } else { return remaining; } } } public TimeSpan ElapsedTime() { return this.originalTimeout - this.RemainingTime(); } void SetDeadline() { Fx.Assert(!deadlineSet, "TimeoutHelper deadline set twice."); this.deadline = DateTime.UtcNow + this.originalTimeout; this.deadlineSet = true; } public static void ThrowIfNegativeArgument(TimeSpan timeout) { ThrowIfNegativeArgument(timeout, "timeout"); } public static void ThrowIfNegativeArgument(TimeSpan timeout, string argumentName) { if (timeout < TimeSpan.Zero) { throw Fx.Exception.ArgumentOutOfRange(argumentName, timeout, SRCore.TimeoutMustBeNonNegative(argumentName, timeout)); } } public static void ThrowIfNonPositiveArgument(TimeSpan timeout) { ThrowIfNonPositiveArgument(timeout, "timeout"); } public static void ThrowIfNonPositiveArgument(TimeSpan timeout, string argumentName) { if (timeout <= TimeSpan.Zero) { throw Fx.Exception.ArgumentOutOfRange(argumentName, timeout, SRCore.TimeoutMustBePositive(argumentName, timeout)); } } [Fx.Tag.Blocking] public static bool WaitOne(WaitHandle waitHandle, TimeSpan timeout) { ThrowIfNegativeArgument(timeout); if (timeout == TimeSpan.MaxValue) { waitHandle.WaitOne(); return true; } else { return waitHandle.WaitOne(timeout, false); } } } } // 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
- WsdlBuildProvider.cs
- ListBindableAttribute.cs
- EditorPart.cs
- PropertyGrid.cs
- ToolTipService.cs
- FontEditor.cs
- AssertSection.cs
- OleDbReferenceCollection.cs
- RenameRuleObjectDialog.cs
- WindowsFormsSynchronizationContext.cs
- OleDbReferenceCollection.cs
- PropertyDescriptors.cs
- _RequestCacheProtocol.cs
- RoutedPropertyChangedEventArgs.cs
- FontCacheLogic.cs
- CustomValidator.cs
- NativeCompoundFileAPIs.cs
- XPathNodePointer.cs
- ControlBindingsCollection.cs
- SafeSystemMetrics.cs
- OleDragDropHandler.cs
- PrintDialog.cs
- Latin1Encoding.cs
- BaseInfoTable.cs
- ConstrainedDataObject.cs
- UnsafeCollabNativeMethods.cs
- Converter.cs
- DesignerOptionService.cs
- ChannelBinding.cs
- MultipleViewPattern.cs
- SynchronousSendBindingElement.cs
- WebPartRestoreVerb.cs
- PointCollection.cs
- LinkClickEvent.cs
- SimpleTypeResolver.cs
- BookmarkEventArgs.cs
- HttpProtocolReflector.cs
- ScopelessEnumAttribute.cs
- FontDriver.cs
- SqlMethodCallConverter.cs
- MSHTMLHost.cs
- Solver.cs
- DataControlImageButton.cs
- PieceDirectory.cs
- TextServicesContext.cs
- GlyphInfoList.cs
- Cursor.cs
- PngBitmapDecoder.cs
- ArrayElementGridEntry.cs
- HtmlButton.cs
- Configuration.cs
- XPathPatternBuilder.cs
- XmlSchemaExternal.cs
- NavigationProperty.cs
- SByte.cs
- TextOnlyOutput.cs
- TextServicesHost.cs
- SafeTimerHandle.cs
- DesignerActionVerbList.cs
- ToolTipAutomationPeer.cs
- ClientRolePrincipal.cs
- ComponentRenameEvent.cs
- HtmlHead.cs
- SignatureConfirmations.cs
- BinaryParser.cs
- ArrayConverter.cs
- WebDescriptionAttribute.cs
- ProfileModule.cs
- XMLSyntaxException.cs
- ScrollItemProviderWrapper.cs
- MLangCodePageEncoding.cs
- OpenTypeMethods.cs
- ResourceContainer.cs
- FormViewActionList.cs
- EventLogEntryCollection.cs
- ProcessProtocolHandler.cs
- CngKeyBlobFormat.cs
- Marshal.cs
- RepeaterDesigner.cs
- XmlSchemaAnyAttribute.cs
- FilteredAttributeCollection.cs
- SystemColors.cs
- XmlDocumentSerializer.cs
- SqlInternalConnectionSmi.cs
- JavaScriptSerializer.cs
- ConnectionManager.cs
- DispatcherOperation.cs
- SqlUtils.cs
- IxmlLineInfo.cs
- EntityTransaction.cs
- ProtectedConfiguration.cs
- Imaging.cs
- ProtocolsConfiguration.cs
- RectangleHotSpot.cs
- NativeObjectSecurity.cs
- OracleBoolean.cs
- RowUpdatedEventArgs.cs
- ListViewInsertionMark.cs
- SafeLocalMemHandle.cs
- TypeConverterHelper.cs