// non-preemptive public static Sched ShortestJobFirst(List <Process> ps) { Comparison <Process> cmp; ps = ps.OrderBy(p => Tuple.Create(p.Arrival, p.Burst)).ToList(); var sched = new Sched(); var t = 0; foreach (var p in ps) { sched.Add(Tuple.Create(p.Burst, p)); t += p.Burst; } return(sched); }
private int drawGantt(Graphics g, string name, Sched sched, int yOffset = 0) { var pwidth = panelGantt.Width; var pheight = panelGantt.Height; var total = sched.Aggregate(0, (t, pair) => t + pair.Item1); total = total == 0 ? 1 : total; var x = 0; var totalLen = 0; var titleRect = new Rectangle(0, yOffset, pwidth, 20); drawStringRect(g, titleRect, name, Brushes.White); var digitRect = new Rectangle(0, 0, 0, 0); foreach (var tup in sched) { var len = tup.Item1; var proc = tup.Item2; var w = (int)(((float)len / total) * pwidth * 0.99); var rect = new Rectangle(x, titleRect.Bottom, w, 100); digitRect = new Rectangle(rect.Right - 35, rect.Bottom, 50, 20); g.FillRectangle(Brushes.Orange, rect); g.DrawRectangle(Pens.Black, rect); drawStringRect(g, rect, proc.Name, Brushes.Green); drawStringRect(g, digitRect, len + totalLen + "", Brushes.Yellow); x += w; totalLen += len; } return(digitRect.Bottom); }