示例#1
0
        public void deleteEvents(EventDeleter deleter)
        // The deleter that checks whether an event
        // should be removed.
        {
            lock (this)
            {
                TclEvent evt, prev;
                TclEvent servicedEvent = null;

                // Handle the special case of deletion of a single event that was just
                // processed by the serviceEvent() method.

                if (deleter == this)
                {
                    servicedEvent = this.servicedEvent;
                    if (servicedEvent == null)
                    {
                        throw new TclRuntimeError("servicedEvent was not set by serviceEvent()");
                    }
                    this.servicedEvent = null;
                }

                for (prev = null, evt = firstEvent; evt != null; evt = evt.next)
                {
                    if (((servicedEvent == null) && (deleter.deleteEvent(evt) == 1)) || (evt == servicedEvent))
                    {
                        if (evt == firstEvent)
                        {
                            firstEvent = evt.next;
                        }
                        else
                        {
                            prev.next = evt.next;
                        }
                        if (evt.next == null)
                        {
                            lastEvent = prev;
                        }
                        if (evt == markerEvent)
                        {
                            markerEvent = prev;
                        }
                        if (evt == servicedEvent)
                        {
                            servicedEvent = null;
                            break; // Just service this one event in the special case
                        }
                    }
                    else
                    {
                        prev = evt;
                    }
                }
                if (servicedEvent != null)
                {
                    throw new TclRuntimeError("servicedEvent was not removed from the queue");
                }
            }
        }
示例#2
0
				public  void  deleteEvents(EventDeleter deleter)
		// The deleter that checks whether an event
		// should be removed.
		{
			lock (this)
			{
				TclEvent evt, prev;
				TclEvent servicedEvent = null;
				
				// Handle the special case of deletion of a single event that was just
				// processed by the serviceEvent() method.
				
				if (deleter == this)
				{
					servicedEvent = this.servicedEvent;
					if (servicedEvent == null)
						throw new TclRuntimeError("servicedEvent was not set by serviceEvent()");
					this.servicedEvent = null;
				}
				
				for (prev = null, evt = firstEvent; evt != null; evt = evt.next)
				{
					if (((servicedEvent == null) && (deleter.deleteEvent(evt) == 1)) || (evt == servicedEvent))
					{
						if (evt == firstEvent)
						{
							firstEvent = evt.next;
						}
						else
						{
							prev.next = evt.next;
						}
						if (evt.next == null)
						{
							lastEvent = prev;
						}
						if (evt == markerEvent)
						{
							markerEvent = prev;
						}
						if (evt == servicedEvent)
						{
							servicedEvent = null;
							break; // Just service this one event in the special case
						}
					}
					else
					{
						prev = evt;
					}
				}
				if (servicedEvent != null)
				{
					throw new TclRuntimeError("servicedEvent was not removed from the queue");
				}
			}
		}