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

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

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

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

Рік:
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:44

Коментарі

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

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

Нічого не вибрано
0%

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

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

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

Admin

26.02.2023 12:38

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