예제 #1
0
 bool TryReleaseWtEvent()
 {
     if (wtHead.Next != null && clock.WallTime >= wtHead.Next.Time)
     {
         WallTimeEvent n = wtHead.Next;
         wtHead.Next = n.Next;
         if (n.Handler != null)
         {
             n.Handler(this, n);
         }
         return(true);
     }
     return(false);
 }
예제 #2
0
 public void RemoveEvent(WallTimeEvent e)
 {
     if (wtHead.Next == null)
     {
         return;
     }
     for (WallTimeEvent i = wtHead; i.Next != null; i = i.Next)
     {
         if (i.Next == e)
         {
             i.Next = e.Next;
             break;
         }
     }
 }
예제 #3
0
 public void EnqueueEvent(WallTimeEvent e)
 {
     if (wtHead.Next == null)
     {
         wtHead.Next = e;
         e.Next      = null;
     }
     else
     {
         //WallTimeEvent node = wtHead;
         WallTimeEvent node;
         for (node = wtHead; node.Next != null && e.Time > node.Next.Time; node = node.Next)
         {
             ; // Just iterate
         }
         e.Next    = node.Next;
         node.Next = e;
     }
 }
예제 #4
0
 public void EnqueueRelativeEvent(WallTimeEvent e, double delta)
 {
     EnqueueEvent(e, clock.WallTime + delta);
 }
예제 #5
0
 public void EnqueueEvent(WallTimeEvent e, double time)
 {
     e.Time = time;
     EnqueueEvent(e);
 }
예제 #6
0
        public string GetDebugInformation()
        {
            StringBuilder str = new StringBuilder();

            str.Append("System clock cycles: ");
            str.AppendLine(clock.ClockTime.ToString());
            str.Append("System wall time: ");
            str.AppendLine(clock.WallTime.ToString());
            str.AppendLine();
            str.AppendLine("Wall-time queue:");
            int wtSize = 0;

            if (wtHead.Next != null)
            {
                for (WallTimeEvent wt = wtHead.Next; wt != null; wt = wt.Next)
                {
                    wtSize++;
                    str.Append(wtSize);
                    str.Append(": ");
                    if (wt.Tag != null)
                    {
                        str.Append(wt.Tag);
                    }
                    else
                    {
                        str.Append("<no tag>");
                    }
                    str.Append(" @ ");
                    str.AppendLine(wt.Time.ToString());
                }
            }
            else
            {
                str.AppendLine("(No items.)");
            }
            str.Append("Total pending wall-time events: ");
            str.AppendLine(wtSize.ToString());
            str.AppendLine();
            str.AppendLine("Clock-time queue:");
            int scSize = 0;

            if (scHead.Next != null)
            {
                for (SystemClockEvent sc = scHead.Next; sc.Next != null; sc = sc.Next)
                {
                    scSize++;
                    str.Append(scSize);
                    str.Append(": ");
                    if (sc.Tag != null)
                    {
                        str.Append(sc.Tag);
                    }
                    else
                    {
                        str.Append("<no tag>");
                    }
                    str.Append(" @ ");
                    str.AppendLine(sc.Time.ToString());
                }
            }
            else
            {
                str.AppendLine("(No items.)");
            }
            str.Append("Total pending system clock events: ");
            str.AppendLine(scSize.ToString());
            return(str.ToString());
        }