コード例 #1
0
ファイル: Form1.cs プロジェクト: maxcriser/3sem
        private void drowResultDiagramm(int curTact)
        {
            int k    = 20;
            int xmax = curTact + 1;
            int ymax = stack.Count + 2;

            //Diagramm.
            Diagramm.Width  = xmax * k;
            Diagramm.Height = ymax * k;
            Diagramm.Refresh();
            debug.Text = "";

            Graphics diagramma = Diagramm.CreateGraphics();

            Pen gridPen = new Pen(Color.Black, 1);

            gridPen.DashStyle = System.Drawing.Drawing2D.DashStyle.Dash;
            for (int i = 0; i <= ymax; i++)
            {
                diagramma.DrawLine(gridPen, 0, k * i, k * xmax, k * i);
            }
            for (int i = 0; i <= xmax; i++)
            {
                diagramma.DrawLine(gridPen, k * i, 0, k * i, k * ymax);
            }

            Pen borderPen = new Pen(Color.Black, 3);

            diagramma.DrawLine(borderPen, 0, k * ymax, k * xmax, k * ymax);
            diagramma.DrawLine(borderPen, 0, 0, 0, k * ymax);

            Pen readyPen = new Pen(Color.Red, 2);

            foreach (Proccess P in stack)
            {
                diagramma.DrawLine(readyPen, k * P.start_ready_tact, k * (ymax - 1), k * P.start_ready_tact, k * (ymax - P.number - 1));
                diagramma.DrawLine(readyPen, k * P.start_work_tact, k * (ymax - 1), k * P.start_work_tact, k * (ymax - P.number - 1));
                diagramma.DrawLine(readyPen, k * P.start_ready_tact, k * (ymax - P.number - 1), k * P.start_work_tact, k * (ymax - P.number - 1));
            }

            Pen workPen = new Pen(Color.Blue, 5);

            foreach (Proccess P in stack)
            {
                diagramma.DrawLine(workPen, k * P.start_work_tact, k * (ymax - 1), k * P.start_work_tact, k * (ymax - P.number - 1));
                diagramma.DrawLine(workPen, k * P.end_work_tact, k * (ymax - 1), k * P.end_work_tact, k * (ymax - P.number - 1));
                diagramma.DrawLine(workPen, k * P.start_work_tact, k * (ymax - P.number - 1), k * P.end_work_tact, k * (ymax - P.number - 1));
            }


            float  sum_time_work = 0;
            float  sum_time_wait = 0;
            string hr            = "+------+-------+-------+------+-----+\n";

            debug.Text += hr;
            debug.Text += "| Proc | Ready | Start | Work | End |\n";
            debug.Text += hr;
            foreach (Proccess P in stack)
            {
                debug.Text +=
                    String.Format("| \"{0,1}\"  |  {1,2}   |  {2,2}   |  {3,2}  | {4,2}  |\n",
                                  P.name, P.start_ready_tact, P.start_work_tact, (P.end_work_tact - P.start_work_tact), P.end_work_tact);
                sum_time_work += P.end_work_tact - P.start_work_tact;
                sum_time_wait += P.tacts_of_wait;
            }
            debug.Text += hr;
            debug.Text += "\n среднее время выполнения = " + (sum_time_work / stack.Count) +
                          "\n среднее время   ожидания = " + (sum_time_wait / stack.Count);
        }