а програм в одній (кілька процесів, або, потоків). По-друге, ці процеси можуть виконуватися як по черзі, так і одночасно (як запрограмує розробник). По-третє, з цих процесів можна легко отримати доступ до всіх глобальних даних програми, тому клас процесу є, по суті, просто частиною програми - звичайним юнітом (unit). По-четверте, можна створити своїх власних нащадків TThread і запустити відразу кілька примірників одного і того ж створеного класу. По-п'яте, кожним процесом дуже легко управляти - запускати, завершувати, призупиняти, переривати, встановлювати пріоритетність, і т.д.
Сам API потоків не дуже складний, але надані класом TThread можливості взагалі чудово прості. Все, що необхідно зробити, - це перекрити віртуальний метод Execute.
Інша відмінна риса класу TThread - це гарантія безпечної роботи з бібліотекою візуальних компонентів VCL. Без використання класу TThread під час викликів VCL можуть виникнути ситуації, що вимагають спеціальної синхронізації.
З погляду операційної системи потік - це її об'єкт. При створенні він отримує дескриптор і відстежується ОС. Об'єкт класу TThread - це конструкція Delphi, відповідна потоку ОС. Цей об'єкт VCL створюється до реального виникнення потоку в системі і знищується після його зникнення.
2. Розробка демонстраційного багатопотокового програми
. 1 Постановка завдання
Розробка демонстраційного багатопотокового додатки з динамічною зміною властивостей вікна і компонент.
Основні вимоги: Наявність кнопок «Запуск потоку», «Зупинка потоку», «Завершення потоку» після натискання на які відповідно починається, зупиняється і завершується демонстрація роботи потоку. Запуск потоку після його зупинки повинен виконуватися з стану, в якому потік був зупинений. Після зупинки потоку забезпечити можливість збереження даних у файлі та завантаження їх при наступному запуску програми.
Загальні вимоги:
1. Для реалізації багатопотокового додатки використовувати компонент TThread.
2. Тип програми: GUI
. 2 Вибір засобів реалізації
Для виконання проекту була вибрана мова програмування Delphi, оскільки він поєднує в собі простоту виконання завдання, побудови користувальницького інтерфейсу, а також володіє потужним набором функцій, що економить час на розробку програмного забезпечення.
Так само в проекті використовується TThread-абстрактний клас для реалізації потоків.
Властивості і методи класу TThread, використовувані в даному проекті представлені в таблицях 1 і 2.
Таблиця 1.
Властивості класу TТhread.
СвойствоОпісаніеproperty FreeOnTerminate: Boolean; Визначає, чи об'єкт потоку знищений автоматично при завершенні потоку. Якщо властивість одно True, то потік буде знищений автоматично при завершенні, якщо властивість дорівнює False, то потік повинен знищуватися явно в коді пріложенія.property Handle: THandle; Містить дескриптор потоку. Використовується для управління потоком за допомогою функцій Windows API.property Priority: TThreadPriority; Визначає пріоритет потоку щодо інших потоків у процессе.property ReturnValue: Integer; Визначає значення, що повертається потоком при його завершеніі.property Suspended: Boolean; Показує, чи є потік призупиненим. Якщо встановити властивість в True, то потік буде припинений, якщо встановити властивість в False виконання потоку буде продолжено.property Terminated: Boolean; Показує, чи був проведений виклик методу Terminate.property ThreadID: THandle; Ідентифікує потік в системі.
Таблиця 2.
Методи класу TТhread.
МетодОпісаніеconstructor Create (CreateSuspended: Boolean); Створює об'єкт потоку. Якщо параметр CreateSuspended дорівнює False, то метод Execute буде викликаний відразу. Якщо параметр CreateSuspended дорівнює True, то метод Execute буде викликаний тільки після виклику методу Resume.destructor Destroy; override; Знищує об'єкт потоку і звільняє пам'ять, виділену для него.procedure DoTerminate; virtual; Викликає подія OnTerminate.procedure Execute; virtual; abstract; Абстрактний метод, що містить код, який буде виконуватися при запуску потока.procedure Resume; Поновлює виконання припиненого потока.procedure Suspend; Припиняє виконання потока.procedure Synchronize (Method: TThreadMethod); Виконує метод, викликаний в рамках головного VCL потока.procedure Terminate ; Дає потоку сигнал на завершення, встановлюючи властивість Terminated в значення True.function WaitFor: LongWord; Чекає завершення потоку і повертає значення, яке визначається властивістю ReturnValue. 2.3 Опис логіки роботи...