示例#1
0
 public void remove_event(steady_timer steadyTime)
 {
     _workEngine.service.post(delegate()
     {
         if (_exited)
         {
             return;
         }
         if (null != steadyTime._waitableNode)
         {
             long lastAbsus = steadyTime._waitableNode.Key;
             _eventsQueue.Remove(steadyTime._waitableNode);
             steadyTime._waitableNode = null;
             if (0 == _eventsQueue.Count)
             {
                 _expireTime = long.MaxValue;
                 CancelWaitableTimer(_timerHandle);
             }
             else if (lastAbsus == _expireTime)
             {
                 _expireTime = _eventsQueue.First.Key;
                 set_timer();
             }
         }
     });
 }
示例#2
0
 public void removeEvent(steady_timer steadyTime)
 {
     _workStrand.post(delegate()
     {
         if (null != steadyTime._waitableNode)
         {
             long lastAbsus = steadyTime._waitableNode.Key;
             _eventsQueue.Remove(steadyTime._waitableNode);
             steadyTime._waitableNode = null;
             if (0 == _eventsQueue.Count)
             {
                 _expireTime = long.MaxValue;
                 CancelWaitableTimer(_timerHandle);
             }
             else if (lastAbsus == _expireTime)
             {
                 _expireTime = _eventsQueue.First.Key;
                 if (_utcMode)
                 {
                     long sleepTime = _expireTime * 10;
                     sleepTime      = sleepTime > 0 ? sleepTime : 0;
                     SetWaitableTimer(_timerHandle, ref sleepTime, 0, 0, 0, 0);
                 }
                 else
                 {
                     long sleepTime = -(_expireTime - system_tick.get_tick_us()) * 10;
                     sleepTime      = sleepTime < 0 ? sleepTime : 0;
                     SetWaitableTimer(_timerHandle, ref sleepTime, 0, 0, 0, 0);
                 }
             }
         }
     });
 }