Литература





Скачать 347.51 Kb.
НазваниеЛитература
страница3/3
Дата публикации04.01.2015
Размер347.51 Kb.
ТипЛитература
100-bal.ru > Информатика > Литература
1   2   3

heightAnimation.To = dataSizeY;

heightAnimation.Duration = TimeSpan.FromSeconds(1);

MainWindow.Vault.vault[position].myEllipse.BeginAnimation(Ellipse.HeightProperty, heightAnimation);

}
dispatcherTimer = new DispatcherTimer();

dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick);

dispatcherTimer.Interval = new TimeSpan(0, 0, 0, 0, speed);

dispatcherTimer.Start();

}

}

public void dispatcherTimer_Tick(object sender, EventArgs e)

{

counter += speed;
// Раздача заданий

while (commands.Count != 0 && (Convert.ToInt64(commands.Peek()[0]) / visualisationSpeed) < counter)

{

string[] currentCommand = commands.Dequeue();

string commandType = currentCommand[1];
Ellipse myEllipse;

SolidColorBrush mySolidColorBrush;
string prosessName;

string dataName;

int coreNumber;
DoubleAnimation widthAnimation;

DoubleAnimation heightAnimation;
switch (commandType)

{

case "ps":

prosessName = currentCommand[2];

coreNumber = Convert.ToInt32(currentCommand[3]);
Processes Prosess = new Processes();
myEllipse = new Ellipse();

mySolidColorBrush = new SolidColorBrush();

mySolidColorBrush.Color = prosessColors.Pop();

myEllipse.Fill = mySolidColorBrush;

myEllipse.StrokeThickness = 2;

myEllipse.Stroke = Brushes.Black;

myEllipse.Width = 1;

myEllipse.Height = 1;
Base.Children.Add(myEllipse);

Canvas.SetLeft(myEllipse, center_x - 11 + (100 + 50 * coreNumber));

Canvas.SetTop(myEllipse, center_y - 11);
widthAnimation = new DoubleAnimation();

widthAnimation.To = processesSizeX;

widthAnimation.Duration = TimeSpan.FromSeconds(1);

myEllipse.BeginAnimation(Ellipse.WidthProperty, widthAnimation);
heightAnimation = new DoubleAnimation();

heightAnimation.To = processesSizeY;

heightAnimation.Duration = TimeSpan.FromSeconds(1);

myEllipse.BeginAnimation(Ellipse.HeightProperty, heightAnimation);
Prosess.Name = prosessName;

Prosess.myEllipse = myEllipse;

Prosess.Orbits.setCenter(Canvas.GetLeft(myEllipse), Canvas.GetTop(myEllipse));
Prosess.Text = new Label();

Prosess.Text.Content = Prosess.Name;

Prosess.Text.FontSize = 15;

Base.Children.Add(Prosess.Text);

Canvas.SetLeft(Prosess.Text, Prosess.Orbits.getTextX());

Canvas.SetTop(Prosess.Text, Prosess.Orbits.getTextY());

Canvas.SetZIndex(Prosess.Text, 100);
Cores[coreNumber] = Prosess;

break;

case "pt":

prosessName = currentCommand[2];

for (int i = 0; i < Cores.Length; i++)

{

if (Cores[i] != null && Cores[i].Name == prosessName)

{

for (int j = 0; j < Cores[i].Orbits.orbits.Length; j++)

{

for (int k = 0; k < Cores[i].Orbits.orbits[j].Length; k++)

{

if (Cores[i].Orbits.orbits[j][k] != null)

{

Base.Children.Remove(Cores[i].Orbits.orbits[j][k].myEllipse);

}

}

}

Base.Children.Remove(Cores[i].Text);

Base.Children.Remove(Cores[i].myEllipse);

Cores[i] = null;

}

}

break;

case "pr":

prosessName = currentCommand[2];

dataName = currentCommand[3];

for (int i = 0; i < Cores.Length; i++)

{

if (Cores[i] != null && Cores[i].Name == prosessName)

{

FlyingData dataFly = new FlyingData();

dataFly.coreNumber = i;

dataFly.op = Cores[i].Orbits.Add();

dataFly.pause = 0;

dataFly.destination = "orbit";
Data getData = Vault.get(dataName);
dataFly.data = new Data();

dataFly.data.Name = getData.Name;
myEllipse = new Ellipse();

mySolidColorBrush = new SolidColorBrush();

mySolidColorBrush.Color = Colors.White;

myEllipse.Fill = mySolidColorBrush;

myEllipse.StrokeThickness = 1.5;

myEllipse.Stroke = Cores[i].myEllipse.Fill;

myEllipse.Width = dataSizeX;

myEllipse.Height = dataSizeY;
Base.Children.Add(myEllipse);

Canvas.SetLeft(myEllipse, Canvas.GetLeft(getData.myEllipse));

Canvas.SetTop(myEllipse, Canvas.GetTop(getData.myEllipse));
dataFly.data.myEllipse = myEllipse;
flyingData.Add(dataFly);

break;

}

}

break;

case "pw":

prosessName = currentCommand[2];

dataName = currentCommand[3];

for (int i = 0; i < Cores.Length; i++)

{

if (Cores[i] != null && Cores[i].Name == prosessName)

{

FlyingData dataFly = new FlyingData();

dataFly.vaultPosition = (int)Vault.Add();

dataFly.pause = 0;

dataFly.destination = "vault";
dataFly.data = new Data();

dataFly.data.Name = dataName;
myEllipse = new Ellipse();

myEllipse.Fill = Cores[i].myEllipse.Fill;

myEllipse.StrokeThickness = 1.5;

myEllipse.Stroke = Brushes.Black;

myEllipse.Width = dataSizeX;

myEllipse.Height = dataSizeY;
Base.Children.Add(myEllipse);

Canvas.SetLeft(myEllipse, Cores[i].Orbits.center_x + (processesSizeX - 1) / 2);

Canvas.SetTop(myEllipse, Cores[i].Orbits.center_y + (processesSizeY - 1) / 2);
dataFly.data.myEllipse = myEllipse;
flyingData.Add(dataFly);

}

}

break;

case "da":

dataName = currentCommand[2];
myEllipse = new Ellipse();

mySolidColorBrush = new SolidColorBrush();

mySolidColorBrush.Color = Colors.White;

myEllipse.Fill = mySolidColorBrush;

myEllipse.StrokeThickness = 1.5;

myEllipse.Stroke = Brushes.Black;

myEllipse.Width = 1;

myEllipse.Height = 1;
Data myEllipseData = new Data();

myEllipseData.Name = dataName;

myEllipseData.myEllipse = myEllipse;
int position = (int)Vault.Add(myEllipseData);
Base.Children.Add(Vault.vault[position].myEllipse);

Canvas.SetLeft(Vault.vault[position].myEllipse, getX(Vault.getX(position)));

Canvas.SetTop(Vault.vault[position].myEllipse, getY(Vault.getY(position)));
widthAnimation = new DoubleAnimation();

widthAnimation.To = dataSizeX;

widthAnimation.Duration = TimeSpan.FromSeconds(1);

MainWindow.Vault.vault[position].myEllipse.BeginAnimation(Ellipse.WidthProperty, widthAnimation);
heightAnimation = new DoubleAnimation();

heightAnimation.To = dataSizeY;

heightAnimation.Duration = TimeSpan.FromSeconds(1);

MainWindow.Vault.vault[position].myEllipse.BeginAnimation(Ellipse.HeightProperty, heightAnimation);

break;

case "dd":

dataName = currentCommand[2];

Base.Children.Remove(Vault.get(dataName).myEllipse);

Vault.delete(dataName);

break;

}

}
for (int i = 0; i < Cores.Length; i++)

{

if (Cores[i] != null)

{

alfa[i] = (alfa[i] + alfaV[i]) % (2 * Math.PI);

Canvas.SetLeft(Cores[i].myEllipse, center_x - 11 + (100 + 50 * i) * Math.Cos(alfa[i]));

Canvas.SetTop(Cores[i].myEllipse, center_y - 11 + (100 + 50 * i) * Math.Sin(alfa[i]));

Cores[i].Orbits.setCenter(Canvas.GetLeft(Cores[i].myEllipse), Canvas.GetTop(Cores[i].myEllipse));

Canvas.SetLeft(Cores[i].Text, Cores[i].Orbits.getTextX());

Canvas.SetTop(Cores[i].Text, Cores[i].Orbits.getTextY());

for (int j = 0; j < Cores[i].Orbits.orbits.Length; j++)

{

for (int k = 0; k < Cores[i].Orbits.orbits[j].Length; k++)

{

if (Cores[i].Orbits.orbits[j][k] != null)

{

Canvas.SetLeft(Cores[i].Orbits.orbits[j][k].myEllipse, Cores[i].Orbits.getX(new orbitPosition(j, k)));

Canvas.SetTop(Cores[i].Orbits.orbits[j][k].myEllipse, Cores[i].Orbits.getY(new orbitPosition(j, k)));

if ((counter - Cores[i].Orbits.addTimes[j][k]) > interval)

{

Base.Children.Remove(Cores[i].Orbits.orbits[j][k].myEllipse);

Cores[i].Orbits.addTimes[j][k] = 0;

Cores[i].Orbits.availableOrbits[j][k] = true;

Cores[i].Orbits.orbits[j][k] = null;

}

}

}

}

}

}
for (int i = 0; i < flyingData.Count; i++)

{

double direction_x;

double direction_y;

double length;
switch (flyingData[i].destination)

{

case "orbit":

direction_x = Cores[flyingData[i].coreNumber].Orbits.getX(flyingData[i].op) - Canvas.GetLeft(flyingData[i].data.myEllipse);

direction_y = Cores[flyingData[i].coreNumber].Orbits.getY(flyingData[i].op) - Canvas.GetTop(flyingData[i].data.myEllipse);

length = Math.Sqrt(direction_x * direction_x + direction_y * direction_y);

if (flyingData[i].pause < 100)

{

flyingData[i].pause++;

}

else

{

if (length < 1)

{

Cores[flyingData[i].coreNumber].Orbits.orbits[flyingData[i].op.orbit][flyingData[i].op.position] = flyingData[i].data;

Cores[flyingData[i].coreNumber].Orbits.addTimes[flyingData[i].op.orbit][flyingData[i].op.position] = counter;

flyingData.RemoveAt(i);

}

else

{

Canvas.SetLeft(flyingData[i].data.myEllipse, Canvas.GetLeft(flyingData[i].data.myEllipse) + 2 * direction_x / length);

Canvas.SetTop(flyingData[i].data.myEllipse, Canvas.GetTop(flyingData[i].data.myEllipse) + 2 * direction_y / length);

}

}

break;

case "vault":

direction_x = getX(Vault.getX(flyingData[i].vaultPosition)) - Canvas.GetLeft(flyingData[i].data.myEllipse);

direction_y = getY(Vault.getY(flyingData[i].vaultPosition)) - Canvas.GetTop(flyingData[i].data.myEllipse);

length = Math.Sqrt(direction_x * direction_x + direction_y * direction_y);

if (length < 1)

{

Canvas.SetLeft(flyingData[i].data.myEllipse, getX(Vault.getX(flyingData[i].vaultPosition)));

Canvas.SetTop(flyingData[i].data.myEllipse, getY(Vault.getY(flyingData[i].vaultPosition)));

Vault.vault[flyingData[i].vaultPosition] = flyingData[i].data;

flyingData.RemoveAt(i);

}

else

{

Canvas.SetLeft(flyingData[i].data.myEllipse, Canvas.GetLeft(flyingData[i].data.myEllipse) + 2 * direction_x / length);

Canvas.SetTop(flyingData[i].data.myEllipse, Canvas.GetTop(flyingData[i].data.myEllipse) + 2 * direction_y / length);

}

break;

}

}

}

}

}
Код программы специфичен для программирования визуализации с помощью технологии WPF. Мы не будем подробно его разбирать, однако отметим некоторые моменты. Система координат связана с центром экрана, движения объектов по окружностям просчитываются в полярных координатах. С каждым типом объектов связан отдельный класс, описывающий структуру объекта. При нажатии на кнопку “Старт” запускается обработчик события, который считывает и разбирает входной файл с историей работы программы, рассчитывает все необходимые параметры (в частности размер хранилища и начальное его состояние, формирует очередь команд для отображения работы программы), и запускает визуализацию. Визуализация строится на основе таймера. Каждые 10 миллисекунд запускается функция, которая пересчитывает расположение объектов, а так же проверяет, пришло ли время для запуска очередной команды из файла с историей, и если текущее время выполнения программы превышает время, указанное в команде, то команда выполняется и удаляется из очереди команд.

Заключение

В результате проведенной работы была разработана программа-визуализатор RideVis, которую можно использовать для представления работы параллельных программ, написанных для системы RiDE. В качестве сущностей визуализации выступают хранилище, данные, процессы, количество процессоров в системе. В качестве событий, на которых основывается визуализация, выступают добавление/удаление данных в хранилище, запуск/завершение процессов, чтение/запись данных в хранилище. По количеству отображаемых вокруг процессов прочитанных данных, а так же по состоянию хранилища, можно сделать первые выводы об эффективности работы программ, написанных для системы RiDE, потому как оценка эффективности является одной из основных задач.

На данный момент система RiDE активно развивается, многие заложенные в нее идеи и возможности еще не реализованы, поэтому пока что речь идет лишь о первой версии визуализатора, отображающего лишь базовые функции системы. Дальнейшее развитие системы визуализации может быть связано с реализацией некоторых отладочных функций, разработкой средств для статистического анализа эффективности работы программ для системы RiDE, а так же создание базового инструментария для визуального программирования.

Литература
1   2   3

Похожие:

Литература iconЛитература по психологии,классичес
Альдебаран-крупнейшая электронная библиотека on-line- художественная, учебная и техническая литература и книги различных жанров:...
Литература iconЛитература чувашская литература
Чувашский государственного университет имени И. Н. Ульянова по специальности русский язык и литература
Литература icon“ Литература + литература”
Идея проведения данного урока взята из газеты “Литература” (приложение к газете “Первое сентября”,№13 за 1998 год, страница 1)
Литература iconПрограмма по формированию навыков безопасного поведения на дорогах...
Литература и история. Литература как искусство слова. Литература и другие виды искусства
Литература iconПрограмма по формированию навыков безопасного поведения на дорогах...
Литература и история. Литература как искусство слова. Литература и другие виды искусства
Литература iconЛитература 1 Русская литература. Мультимедийная энциклопедия. 8-11...
Математика. Учебное электронное издание. 5-11. Новые возможности для усвоения математики
Литература iconЛИТЕРАТУРА К КУРСУ "ФИЛОСОФИЯ"
ОСНОВНАЯ ЛИТЕРАТУРА и ДОПОЛНИТЕЛЬНАЯ ЛИТЕРАТУРА
Литература icon"Литература народов России" (Кабардино-черкесская литература)
...
Литература iconТема урока. Основное содержание
Введение. Судьба России в XX веке. Основные направления, темы и проблемы русской литературы XX века. Русская советская литература;...
Литература iconПрограмма по формированию навыков безопасного поведения на дорогах...
Литература и жизнь. Литература как искусство слова. Вымысел. Литература как учебный предмет
Литература iconЛитература Тема: Человек и история в поэме А. С. Пушкина «Медный всадник»
Учебно-методическое обеспечение: учебник 10 класс литература Коровина В. И. Литература. 10 класс, Москва Просвещение. 1часть. 2012...
Литература iconРабочая программа по литературе составлена на основе программы "Литература....
Литература. 5-11 класс" под ред. Г. И. Беленького. Реализуется в учебнике "Литература. 11 класс: Учебник для общеобразовательных...
Литература iconСписок бесплатных электронных библиотек
Альдебаран крупнейшая электронная библиотека on-line художественная, учебная и техническая литература и книги различных жанров: детективы,...
Литература iconРодная литература
Рабочая программа по литературе для 5 класса к учебнику «Родная литература» (Ана литература) 5 класс. Авторы: (Суюнчев А., Азаматова...
Литература iconРабочая программа учебного предмета: «Литература»
«Литература» под редакцией В. Я. Коровиной (Программы для общеобразовательных учреждений. Литература. 5-11 кл. Авторы: В. Я. Коровина,...
Литература iconРабочая программа педагога по курсу «Литература»
Литература 5 – 11 классы/ под редакцией Г. И. Беленького. – 4-е изд., перереб. – М.: Мнемозина, 2009. – 110с и ориентирована на использование...


Школьные материалы


При копировании материала укажите ссылку © 2013
контакты
100-bal.ru
Поиск