Добавил:
Только когда поступишь в технический вуз поймешь на сколько ты гуманитарий Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Разработка приложений на C++_Практическая работа №8

.pdf
Скачиваний:
0
Добавлен:
07.06.2025
Размер:
950.87 Кб
Скачать

Page {

objectName: "mainPage" allowedOrientations: Orientation.All

WorkerScript {

id: worker

source: "fibonacci_worker.js"

onMessage: {

txt.text = "Result: " + messageObject.reply; console.log("Calculation complete:" + messageObject.reply);

}

}

TextInput {

id: numberInput anchors.top: parent.top anchors.left: parent.left anchors.right: parent.right text: "3"

}

Button {

id: btn

anchors.top: numberInput.bottom anchors.left: parent.left anchors.right: parent.right

text: "Calculate Fibonacci number"

5

onClicked: {

var n = parseInt(numberInput.text); if (!isNaN(n)) {

worker.sendMessage({ type: "calculate", n: n });

}

}

}

Text {

id: txt

anchors.top: btn.bottom anchors.left: btn.left anchors.right: btn.right text: "Result: " enabled: true

}

}

// fibonacci_worker.js function fibonacci(n) {

if (n < 2) { return n;

} else {

var a = fibonacci(n - 1); var b = fibonacci(n - 2); return a + b;

}

}

6

WorkerScript.onMessage = function(message) { if (message.type === "calculate") {

var n = message.n;

var result = fibonacci(n);

WorkerScript.sendMessage({ 'reply': result }) console.log(result)

}

}

В данном примере мы используем WorkerScript для параллельного вычисления n-го элемента из последовательности Фибоначчи.

Процесс вычисления элемента последовательности Фибоначчи может быть ресурсоемким в зависимости от его номера. Поэтому вычисление элементов в отдельном потоке может улучшить производительность приложения.

Задача разбивается на две части: основной поток и рабочий поток. В

основном потоке выполняется пользовательский интерфейс, а в рабочем потоке выполняются вычисления. Мы используем WorkerScript для управления рабочим потоком.

WorkerScript - это класс, который позволяет запускать JavaScript-код в отдельном потоке. Он используется для выполнения длительных операций,

которые могут блокировать основной поток. Взаимодействие между рабочим потоком и основным потоком осуществляется посредством передачи сообщений между ними.

В рабочем потоке мы определяем функцию `fibonacci(n)`, которая рекурсивно вычисляет n-й элемент последовательности Фибоначчи. Когда

7

вычисление завершено, мы отправляем сообщение с результатом выполнения

восновной поток с помощью метода `WorkerScript.sendMessage()`.

Восновном потоке мы создаем экземпляр `WorkerScript` и

устанавливаем исходный код файла JavaScript, который будет выполняться в рабочем потоке. Мы также добавляем слушатели для сообщений, которые будут отправляться из рабочего потока. Когда сообщение принимается, мы меняем значение свойства `result` в основном потоке.

ВQML мы создаем элементы пользовательского интерфейса: поле для ввода номера элемента последовательности Фибоначчи, кнопку для запуска вычисления и текстовое поле для отображения результата. При нажатии на кнопку мы отправляем сообщение с номером элемента последовательности в рабочий поток.

Вобщем и целом, использование WorkerScript позволяет выполнять сложные вычисления в отдельном потоке, не блокируя основной поток и не приводя к зависанию интерфейса пользователя.

8