Управління процесом паралельних обчислень

Інформація про навчальний заклад

ВУЗ:
Інші
Інститут:
О
Факультет:
Механіко технологічний
Кафедра:
Кафедра програмного забезпечення

Інформація про роботу

Рік:
2015
Тип роботи:
Лабораторна робота
Предмет:
СП
Група:
КІ-12

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти і науки України Кіровоградський національний технічний університет Механіко-технологічний факультет Кафедра програмного забезпечення Дисципліна: ПРО Лабораторна робота №3 Тема: «Управління процесом паралельних обчислень» Мета: Отримати навики управління процесом паралельних обчислень. Завдання - Створити проект. - Вибрати колір, довжину та ширину прямокутника у відповідності з варіантом. - Створити задачі и паралельні потоки обчислень. - В кожному потоці обчислити площу прямокутника в пікселях. - В окремому потоці обчислити сумарну площу прямокутників в пікселях. - Виконати програму Лістинг програми: package javafxapplication3; import javafx.application.Application; import static javafx.application.Application.launch; import javafx.application.Platform; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.concurrent.Task; import javafx.event.EventHandler; import javafx.scene.Scene; import javafx.scene.control.RadioButton; import javafx.scene.control.Toggle; import javafx.scene.control.ToggleGroup; import javafx.scene.layout.Pane; import javafx.scene.paint.Color; import javafx.scene.shape.Rectangle; import javafx.scene.text.Font; import javafx.scene.text.FontWeight; import javafx.scene.text.Text; import javafx.stage.Stage; import javafx.stage.WindowEvent; public class JavaFXApplication3 extends Application { // висота та ширина сцени private int SCENE_HEIGHT = 330; private int SCENE_WIDTH = 350; // висота та ширина прямокутників private int RECTANGLE_HEIGHT = 180; private int RECTANGLE_WIDTH = 40; // Загаловок вікна private String title = "Tsimbal #3"; private String radioButtonNameStart = "Старт"; private String radioButtonNameStop = "Стоп"; private int MAX_RECTANGLE_HEIGHT = RECTANGLE_HEIGHT; // максимальний розмір прямокутника private boolean direction_flag_1 = true; // флаг інкрементації чи декрементації прямокутника private boolean direction_flag_2 = true; // флаг інкрементації чи декрементації прямокутника private boolean direction_flag_3 = true; // флаг інкрементації чи декрементації прямокутника private boolean direction_flag_4 = true; // флаг інкрементації чи декрементації прямокутника private boolean thread1CanWork = true; // флаг інкрементації чи декрементації прямокутника private boolean thread2CanWork = true; // флаг інкрементації чи декрементації прямокутника private boolean thread3CanWork = true; // флаг інкрементації чи декрементації прямокутника private boolean thread4CanWork = true; // флаг інкрементації чи декрементації прямокутника @Override public void start(Stage primaryStage) throws InterruptedException { Pane root = new Pane(); // створення панелі та додавання графігних елементів final Rectangle rectangle1 = createRectangle(10, 40, RECTANGLE_WIDTH, RECTANGLE_HEIGHT, Color.BLUE); // створення прямокутника final Text text1 = createTextLabel(10, 20); // створення текстового поля root.getChildren().add(rectangle1); root.getChildren().add(text1); final Rectangle rectangle2 = createRectangle(80, 40, RECTANGLE_WIDTH, RECTANGLE_HEIGHT, Color.RED); // створення прямокутника final Text text2 = createTextLabel(80, 20); // створення текстового поля root.getChildren().add(rectangle2); root.getChildren().add(text2); final Rectangle rectangle3 = createRectangle(150, 40, RECTANGLE_WIDTH, RECTANGLE_HEIGHT, Color.YELLOW); // створення прямокутника final Text text3 = createTextLabel(150, 20); // створення текстового поля root.getChildren().add(rectangle3); root.getChildren().add(text3); final Rectangle rectangle4 = createRectangle(220, 40, RECTANGLE_WIDTH, RECTANGLE_HEIGHT, Color.GREEN); // створення прямокутника final Text text4 = createTextLabel(220, 20); // створення текстового поля root.getChildren().add(rectangle4); root.getChildren().add(text4); final Text text5 = createTextLabel(10, MAX_RECTANGLE_HEIGHT + 80); // створення текстового поля root.getChildren().add(text5); Scene scene = new Scene(root, SCENE_WIDTH, SCENE_HEIGHT); // створення сцени primaryStage.setTitle(title); // встановлення заголовка primaryStage.setScene(scene); primaryStage.show(); // Створення тасків для потоків final Task<Void> task1 = new Task<Void>() { @Override protected Void call() throws Exception { while (true) { Thread.sleep(10); if (thread1CanWork) { Platform.runLater(new Runnable() { @Override public void run() { double height = rectangle1.getHeight(); if (height <= 1) { direction_flag_1 = false; } else if (height >= MAX_RECTANGLE_HEIGHT) { direction_flag_1 = true; } if (direction_flag_1) { height = height - 1; } else { height = height + 1; } rectangle1.setHeight(height); text1.setText(((int) (height * rectangle1.getWidth())) + ""); } }); } } } }; // Створення тасків для потоків final Task<Void> task2 = new Task<Void>() { @Override protected Void call() throws Exception { while (true) { Thread.sleep(15); if (thread2CanWork) { Platform.runLater(new Runnable() { @Override public void run() { double height = rectangle2.getHeight(); if (height <= 1) { direction_flag_2 = false; } else if (height >= MAX_RECTANGLE_HEIGHT) { direction_flag_2 = true; } if (direction_flag_2) { height = height - 1; } else { height = height + 1; } rectangle2.setHeight(height); text2.setText(((int) (height * rectangle2.getWidth())) + ""); } }); } } } }; // Створення тасків для потоків final Task<Void> task3 = new Task<Void>() { @Override protected Void call() throws Exception { while (true) { Thread.sleep(20); if (thread3CanWork) { Platform.runLater(new Runnable() { @Override public void run() { double height = rectangle3.getHeight(); if (height <= 1) { direction_flag_3 = false; } else if (height >= MAX_RECTANGLE_HEIGHT) { direction_flag_3 = true; } if (direction_flag_3) { height = height - 1; } else { height = height + 1; } rectangle3.setHeight(height); text3.setText(((int) (height * rectangle3.getWidth())) + ""); } }); } } } }; // Створення тасків для потоків final Task<Void> task4 = new Task<Void>() { @Override protected Void call() throws Exception { while (true) { Thread.sleep(25); if (thread4CanWork) { Platform.runLater(new Runnable() { @Override public void run() { double height = rectangle4.getHeight(); if (height <= 1) { direction_flag_4 = false; } else if (height >= MAX_RECTANGLE_HEIGHT) { direction_flag_4 = true; } if (direction_flag_4) { height = height - 1; } else { height = height + 1; } rectangle4.setHeight(height); text4.setText(((int) (height * rectangle4.getWidth())) + ""); } }); } } } }; // Створення тасків для потоків final Task<Void> task5 = new Task<Void>() { @Override protected Void call() throws Exception { while (true) { Thread.sleep(10); Platform.runLater(new Runnable() { @Override public void run() { double s1 = rectangle1.getHeight() * rectangle1.getWidth(); double s2 = rectangle2.getHeight() * rectangle2.getWidth(); double s3 = rectangle3.getHeight() * rectangle3.getWidth(); double s4 = rectangle4.getHeight() * rectangle4.getWidth(); text5.setText("Сумарна площа: " + (int) (s1 + s2 + s3 + s4)); } }); } } }; //Створення потоків Thread thread1 = new Thread(task1); thread1.start(); Thread thread2 = new Thread(task2); thread2.start(); Thread thread3 = new Thread(task3); thread3.start(); Thread thread4 = new Thread(task4); thread4.start(); Thread thread5 = new Thread(task5); thread5.start(); int contentHeight = MAX_RECTANGLE_HEIGHT + 80 + 10; createRadioButton(root, 10, contentHeight, new ChangeListener<Toggle>() { @Override public void changed(ObservableValue<? extends Toggle> ov, Toggle t, Toggle t1) { RadioButton chk = (RadioButton) t1.getToggleGroup().getSelectedToggle(); if (chk.getText().equals(radioButtonNameStart)) { thread1CanWork = true; } else { thread1CanWork = false; } } }); createRadioButton(root, 80, contentHeight, new ChangeListener<Toggle>() { @Override public void changed(ObservableValue<? extends Toggle> ov, Toggle t, Toggle t1) { RadioButton chk = (RadioButton) t1.getToggleGroup().getSelectedToggle(); // Cast object to radio button if (chk.getText().equals(radioButtonNameStart)) { thread2CanWork = true; } else { thread2CanWork = false; } } }); createRadioButton(root, 150, contentHeight, new ChangeListener<Toggle>() { @Override public void changed(ObservableValue<? extends Toggle> ov, Toggle t, Toggle t1) { RadioButton chk = (RadioButton) t1.getToggleGroup().getSelectedToggle(); // Cast object to radio button if (chk.getText().equals(radioButtonNameStart)) { thread3CanWork = true; } else { thread3CanWork = false; } } }); createRadioButton(root, 220, contentHeight, new ChangeListener<Toggle>() { @Override public void changed(ObservableValue<? extends Toggle> ov, Toggle t, Toggle t1) { RadioButton chk = (RadioButton) t1.getToggleGroup().getSelectedToggle(); // Cast object to radio button if (chk.getText().equals(radioButtonNameStart)) { thread4CanWork = true; } else { thread4CanWork = false; } } }); // створення слухача для зупинки потоків в разі натиснення кнопхи "Вихід" primaryStage.setOnCloseRequest(new EventHandler<WindowEvent>() { @Override public void handle(WindowEvent t) { task1.cancel(); task2.cancel(); task3.cancel(); task4.cancel(); task5.cancel(); } }); } // функція для створення RadioButton void createRadioButton(Pane root, int x, int y, ChangeListener<Toggle> changeListener) { final ToggleGroup group = new ToggleGroup(); // створення групи для RadioButton RadioButton rb1 = new RadioButton(radioButtonNameStart); rb1.setToggleGroup(group); rb1.setSelected(true); rb1.setLayoutX(x); // встановлення Х позиції rb1.setLayoutY(y); // встановлення У позиції RadioButton rb2 = new RadioButton(radioButtonNameStop); rb2.setToggleGroup(group); rb2.setLayoutX(x); // встановлення Х позиції rb2.setLayoutY(y + 20); // встановлення У позиції root.getChildren().add(rb1); root.getChildren().add(rb2); // додавання слухача подій для зміни стану потока при написканні на RadioButton group.selectedToggleProperty().addListener(changeListener); } // функція для створення прямокутника Rectangle createRectangle(int x, int y, int w, int h, Color color) { Rectangle r = new Rectangle(x, y, w, h); r.setFill(color); return r; } // функція для створення текстового поля Text createTextLabel(int x, int y) { Text localText = new Text(); //создать текст localText.setLayoutX(x); // встановлення Х позиції localText.setLayoutY(y); // встановлення У позиції localText.setFont(Font.font("Arial", FontWeight.NORMAL, 15)); //встановлення шрифту localText.setFill(Color.BLACK); //цвет текста return localText; } /** * @param args the command line arguments */ public static void main(String[] args) { launch(args); }} Висновок: в ході даної лабораторної роботи я отримала навики управління процесом паралельних обчислень.
Антиботан аватар за замовчуванням

16.06.2015 12:06-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!