Esempio n. 1
0
 public bool Change(long dueTime)
 {
     if (dueTime < -1)
     {
         throw new ArgumentOutOfRangeException("dueTime");
     }
     if (Interlocked.CompareExchange(ref _status, _changing, _created) == _created)
     {
         _startTime = ThreadingHelper.Milliseconds(ThreadingHelper.TicksNow());
         var wrapped = Interlocked.CompareExchange(ref _wrapped, null, null);
         if (wrapped == null)
         {
             return(false);
         }
         if (dueTime == -1)
         {
             _targetTime = -1;
         }
         else
         {
             _targetTime = _startTime + dueTime;
             wrapped.Change(TimeSpan.FromMilliseconds(dueTime), TimeSpan.FromMilliseconds(-1));
         }
         Volatile.Write(ref _status, _created);
         return(true);
     }
     return(false);
 }
Esempio n. 2
0
        public long CheckRemaining()
        {
            var remaining = _targetTime - ThreadingHelper.Milliseconds(ThreadingHelper.TicksNow());

            if (remaining <= 0)
            {
                Callback(null);
                return(0);
            }
            return(remaining);
        }
Esempio n. 3
0
        private void Start(long dueTime)
        {
            if (dueTime < -1)
            {
                throw new ArgumentOutOfRangeException(nameof(dueTime));
            }

            _startTime  = ThreadingHelper.Milliseconds(ThreadingHelper.TicksNow());
            _targetTime = dueTime == -1 ? -1 : _startTime + dueTime;
            _wrapped    = Timer.GetTimer(Finish, TimeSpan.FromMilliseconds(dueTime), TimeSpan.FromMilliseconds(-1));
        }
Esempio n. 4
0
        private void Start(long dueTime)
        {
            if (dueTime < -1)
            {
                throw new ArgumentOutOfRangeException(nameof(dueTime));
            }

            if (Interlocked.CompareExchange(ref _status, _started, _created) == _created)
            {
                _startTime  = ThreadingHelper.Milliseconds(ThreadingHelper.TicksNow());
                _targetTime = dueTime == -1 ? -1 : _startTime + dueTime;
                _wrapped    = Timer.GetTimer(Finish, TimeSpan.FromMilliseconds(dueTime), TimeSpan.FromMilliseconds(-1));
            }
        }
Esempio n. 5
0
        public long CheckRemaining()
        {
            if (_targetTime == -1)
            {
                return(-1);
            }
            var remaining = _targetTime - ThreadingHelper.Milliseconds(ThreadingHelper.TicksNow());

            if (remaining <= 0)
            {
                Finish(null);
                return(0);
            }
            return(remaining);
        }
Esempio n. 6
0
 protected void Start(long dueTime)
 {
     if (dueTime < -1)
     {
         throw new ArgumentOutOfRangeException("dueTime");
     }
     _startTime = ThreadingHelper.Milliseconds(ThreadingHelper.TicksNow());
     if (dueTime == -1)
     {
         _targetTime = -1;
     }
     else
     {
         _targetTime = _startTime + dueTime;
     }
     _wrapped = new Timer(Finish, null, TimeSpan.FromMilliseconds(dueTime), TimeSpan.FromMilliseconds(-1));
 }
Esempio n. 7
0
 public bool Change(long dueTime)
 {
     if (Interlocked.CompareExchange(ref _status, _changing, _created) == _created)
     {
         _startTime  = ThreadingHelper.Milliseconds(ThreadingHelper.TicksNow());
         _targetTime = _startTime + dueTime;
         var wrapped = Interlocked.CompareExchange(ref _wrapped, null, null);
         if (wrapped == null)
         {
             return(false);
         }
         wrapped.Change(TimeSpan.FromMilliseconds(dueTime), TimeSpan.FromMilliseconds(-1));
         Volatile.Write(ref _status, _created);
         return(true);
     }
     return(false);
 }
Esempio n. 8
0
 private void Initialize(long dueTime)
 {
     if (Thread.VolatileRead(ref _executed) == 1)
     {
         ThreadingHelper.SpinWaitWhile(ref _completed, 1);
         Thread.VolatileWrite(ref _executed, 0);
     }
     _start      = ThreadingHelper.Milliseconds(ThreadingHelper.TicksNow());
     _targetTime = _start + dueTime;
     if (_wrapped == null)
     {
         _wrapped = new Timer(Callback, null, dueTime, System.Threading.Timeout.Infinite);
     }
     else
     {
         _wrapped.Change(dueTime, System.Threading.Timeout.Infinite);
     }
 }
Esempio n. 9
0
 public Timeout(Action callback, long dueTime, CancellationToken token)
 {
     if (callback == null)
     {
         throw new NullReferenceException("callback");
     }
     _start = ThreadingHelper.TicksNow();
     if (token.IsCancellationRequested)
     {
         _callback = null;
         _wrapped  = null;
     }
     else
     {
         _callback = callback;
         Initialize(dueTime);
         token.Register(Cancel);
     }
     _hashcode = unchecked ((int)DateTime.Now.Ticks);
 }
Esempio n. 10
0
 protected void Start(long dueTime)
 {
     _startTime  = ThreadingHelper.Milliseconds(ThreadingHelper.TicksNow());
     _targetTime = _startTime + dueTime;
     _wrapped    = new Timer(Finish, null, TimeSpan.FromMilliseconds(dueTime), TimeSpan.FromMilliseconds(-1));
 }