Esempio n. 1
0
        /// <summary>
        /// Record from a queue. The only real use case for this record as of now.
        /// </summary>
        /// <param name="queue">The queue to create this record from.</param>
        public ContextSwitchRecord(IQueue queue)
        {
            Process next = queue.GetContextSwitch();
            this.Ready = new List<ProcessRecord>();
            this.IO = new List<ProcessRecord>();
            this.Complete = new List<ProcessRecord>();

            this.Running = null;
            if (next != null && queue.State != QueueState.COMPLETE) this.Running = new ProcessRecord(next.Name, next.Parent.Name, next.Time.Current.Duration);
            this.Time = queue.TotalTime - 1;        //-1 because we're checking this AFTER it has incremented times.

            foreach (Process p in queue.CompleteProcs)
            {
                ProcessRecord add = new ProcessRecord()
                {
                    Name = p.Name,
                    Parent = p.Parent.Name,
                    CurrentTime = p.Time.Current == null ? 0 : p.Time.Current.Duration
                };
                this.Complete.Add(add);
            }

            foreach (Process p in queue.IOProcs) this.IO.Add(new ProcessRecord(p.Name, p.Parent.Name, p.Time.Current.Duration));

            foreach (Process p in queue.ReadyProcs)
            {
                if(p != next) this.Ready.Add(new ProcessRecord(p.Name, p.Parent.Name, p.Time.Current.Duration));
            }
        }