예제 #1
0
 private void workerThread()
 {
     D.Say(10, "starting working thread");
     while (true)
     {
         D.Say(10, string.Format("worker going to sleep; queue count {0}", this.priQueue.Count()));
         this.queueNonemptyEvent.WaitOne();
         D.Say(10, "worker waking up");
         QueueRequestIfc queueRequestIfc = this.Dequeue();
         if (queueRequestIfc == null)
         {
             D.Sayf(10, "Worker thread continuing after apparent queue cancellation; queuelen {0}", new object[]
             {
                 this.priQueue.Count()
             });
         }
         else
         {
             if (queueRequestIfc is QueueSuicideRequest)
             {
                 break;
             }
             D.Sayf(10, "Processing {0}", new object[]
             {
                 queueRequestIfc
             });
             queueRequestIfc.DoWork();
             D.Sayf(10, "done with {0}", new object[]
             {
                 queueRequestIfc
             });
         }
     }
     D.Say(3, "worker thread exiting");
 }
예제 #2
0
 public void enqueueTileRequest(QueueRequestIfc qr)
 {
     this.enqueueTileRequests(new QueueRequestIfc[]
     {
         qr
     });
 }
예제 #3
0
 public void Enqueue(QueueRequestIfc qr)
 {
     Monitor.Enter(this);
     try
     {
         QueuedTileProvider.QueueRequestCell queueRequestCell = new QueuedTileProvider.QueueRequestCell();
         queueRequestCell.qr             = qr;
         queueRequestCell.queuedInterest = qr.GetInterest();
         this.cellMap.Add(qr, queueRequestCell);
         this.queue.Add(queueRequestCell, qr);
         this.UpdateDebugList();
     }
     finally
     {
         Monitor.Exit(this);
     }
 }
예제 #4
0
			public void Enqueue(QueueRequestIfc qr)
			{
				Monitor.Enter(this);
				try
				{
					QueuedTileProvider.QueueRequestCell queueRequestCell = new QueuedTileProvider.QueueRequestCell();
					queueRequestCell.qr = qr;
					queueRequestCell.queuedInterest = qr.GetInterest();
					this.cellMap.Add(qr, queueRequestCell);
					this.queue.Add(queueRequestCell, qr);
					this.UpdateDebugList();
				}
				finally
				{
					Monitor.Exit(this);
				}
			}
예제 #5
0
 public void ChangePriority(QueueRequestIfc qr)
 {
     Monitor.Enter(this);
     try
     {
         if (this.cellMap.ContainsKey(qr))
         {
             QueuedTileProvider.QueueRequestCell key = this.cellMap[qr];
             this.queue.Remove(key);
             this.cellMap.Remove(qr);
             this.Enqueue(qr);
             this.UpdateDebugList();
         }
     }
     finally
     {
         Monitor.Exit(this);
     }
 }
예제 #6
0
 public void ChangePriority(QueueRequestIfc qr)
 {
     Monitor.Enter(this);
     try
     {
         if (cellMap.ContainsKey(qr))
         {
             QueueRequestCell key = cellMap[qr];
             queue.Remove(key);
             cellMap.Remove(qr);
             Enqueue(qr);
             UpdateDebugList();
         }
     }
     finally
     {
         Monitor.Exit(this);
     }
 }
예제 #7
0
 public void enqueueTileRequests(QueueRequestIfc[] qrlist)
 {
     QueuedTileProvider.PriQueue obj;
     Monitor.Enter(obj = this.priQueue);
     try
     {
         for (int i = 0; i < qrlist.Length; i++)
         {
             QueueRequestIfc queueRequestIfc = qrlist[i];
             D.Say(10, string.Format("Queueing req {0}", queueRequestIfc.ToString()));
             this.priQueue.Enqueue(queueRequestIfc);
         }
         this.priQueue.TruncateQueue(QueuedTileProvider.MAX_QLEN);
         this.queueNonemptyEvent.Set();
     }
     finally
     {
         Monitor.Exit(obj);
     }
 }
예제 #8
0
        private QueueRequestIfc Dequeue()
        {
            QueuedTileProvider.PriQueue obj;
            Monitor.Enter(obj = this.priQueue);
            QueueRequestIfc result;

            try
            {
                QueueRequestIfc queueRequestIfc = this.priQueue.Dequeue();
                if (queueRequestIfc == null)
                {
                    this.queueNonemptyEvent.Reset();
                }
                result = queueRequestIfc;
            }
            finally
            {
                Monitor.Exit(obj);
            }
            return(result);
        }
예제 #9
0
        private QueueRequestIfc Dequeue()
        {
            PriQueue obj;

            Monitor.Enter(obj = priQueue);
            QueueRequestIfc result;

            try
            {
                QueueRequestIfc queueRequestIfc = priQueue.Dequeue();
                if (queueRequestIfc == null)
                {
                    queueNonemptyEvent.Reset();
                }

                result = queueRequestIfc;
            }
            finally
            {
                Monitor.Exit(obj);
            }

            return(result);
        }
예제 #10
0
 public void ChangePriority(QueueRequestIfc qr)
 {
     this.priQueue.ChangePriority(qr);
 }
예제 #11
0
		public void enqueueTileRequest(QueueRequestIfc qr)
		{
			this.enqueueTileRequests(new QueueRequestIfc[]
			{
				qr
			});
		}
예제 #12
0
		public void enqueueTileRequests(QueueRequestIfc[] qrlist)
		{
			QueuedTileProvider.PriQueue obj;
			Monitor.Enter(obj = this.priQueue);
			try
			{
				for (int i = 0; i < qrlist.Length; i++)
				{
					QueueRequestIfc queueRequestIfc = qrlist[i];
					D.Say(10, string.Format("Queueing req {0}", queueRequestIfc.ToString()));
					this.priQueue.Enqueue(queueRequestIfc);
				}
				this.priQueue.TruncateQueue(QueuedTileProvider.MAX_QLEN);
				this.queueNonemptyEvent.Set();
			}
			finally
			{
				Monitor.Exit(obj);
			}
		}
예제 #13
0
		public void ChangePriority(QueueRequestIfc qr)
		{
			this.priQueue.ChangePriority(qr);
		}
예제 #14
0
			public void ChangePriority(QueueRequestIfc qr)
			{
				Monitor.Enter(this);
				try
				{
					if (this.cellMap.ContainsKey(qr))
					{
						QueuedTileProvider.QueueRequestCell key = this.cellMap[qr];
						this.queue.Remove(key);
						this.cellMap.Remove(qr);
						this.Enqueue(qr);
						this.UpdateDebugList();
					}
				}
				finally
				{
					Monitor.Exit(this);
				}
			}
예제 #15
0
 public void enqueueTileRequest(QueueRequestIfc qr)
 {
     enqueueTileRequests(new[] { qr });
 }