Пример #1
0
 private static void Process()
 {
     while (true)
     {
         if (shutdown)
         {
             return;
         }
         IdlingMeterQueueItem <int> item = null;
         lock (sync)
         {
             if (queue.Count > 0)
             {
                 item = queue.Dequeue();
             }
         }
         if (item != null)
         {
             DispatchItem(item);
         }
         else
         {
             pass.WaitOne();
         }
     }
 }
Пример #2
0
        public static void DecrementResourceUsage(string resourceName)
        {
            IdlingMeterQueueItem <int> item = new IdlingMeterQueueItem <int>
            {
                ResourceName    = resourceName,
                DifferenceValue = 1,
                Operation       = IdlingMeterOperation.Decrease,
                Time            = DateTime.Now
            };

            lock (sync)
            {
                queue.Enqueue(item);
                pass.Set();
            }
        }
Пример #3
0
        private static void DispatchItem(IdlingMeterQueueItem <int> item)
        {
            switch (item.Operation)
            {
            case IdlingMeterOperation.Increase:
                IncrementResourceUsagePrivate(item.ResourceName, item.DifferenceValue, item.Time);
                break;

            case IdlingMeterOperation.Decrease:
                DecrementResourceUsagePrivate(item.ResourceName, item.DifferenceValue, item.Time);
                break;

            default:
                throw new NotSupportedException("Incorrect queue operation.");
            }
        }