Для запуску породженого потоку в головній програмі потрібно підключити модуль (файл) потоку, і створити змінну, яка буде мати тип – наш потік. Для створення потоку виконаємо таку операцію: <змінна_типу нашого потоку>:=<назва потоку>.Create(Suspended). Від параметра Suspended (Boolean) буде залежати робота нашого потоку, а саме, якщо True – процес буде відкладений, тобто очікуватиме свого запуску за допомогою процедури Resume, а якщо ж False – потік запуститься одразу ж після створення. Також важливо задати властивість FreeOnTerminate для потоку, яке в значенні True буде знищувати потік одразу ж по його завершенні. Важливою є процедура Resume, яка запускає роботу потоку. Для кращої роботи нашого потоку можна також налаштувати його пріоритет, а саме <змінна_типу нашого потоку>.Priority:= tpLowest or tpLower or tpNormal or …..
Для обміну даними між основним і породженим потоком, в породженому потоці потрібно підключити модуль головної програми (модуль головного потоку), і описати процедуру, яка буде надсилати дані головній програмі. При цьому, щоб уникнути помилок обміну, потрібно використовувати процедуру Synchronize, яка синхронізовано буде надсилати повідомлення головній програмі. Якщо цього не зробити, то є великий ризик аварійного завершення програми, або некоректної роботи програми (в кращому випадку).
63. Особливості проекту threadProject (фонове обчислення pi).
Програма ThreadProject виконує обчислення числа Pi за формулою Тейлора. Так як це досить тривале обчислення, ми створюємо додатковий потік, який буде обчислювати число не «підвішуючи» роботу всієї програми. Метод Execute виконує всі обчислення числа Pi за формулою, і коли остача ділення кількості ітерацій на час обновлення результату рівна нулю – метод викликає процедуру обновлення результату, тобто обновлює Label. Слід зауважити, що обновлення відбувається синхронізовано, щоб уникнути небажаного результату, тобто помилки у виконанні. Потік створюється відкладеним, тобто Suspended=True, що дає можливість активувати його в будь-який зручний момент, а не одразу ж по створенні. При клацанні на CheckBox процес запускається або призупиняється керуючи параметром Suspended. А в разі кліку на кнопці Stop виконує Terminate (зупинення потоку).
64. Особливості проекту thrdDemo (сортування в паралельних потоках).
Проект ThrdDemo виконує сортування масивів цілих чисел різними методами, зокрема: сортування вибором, бульбашка, швидке сортування, метод пошуку. Відбувається впорядкування за зростанням масивів випадково-згенерованих чисел
Судячи з того, як швидко виконується сортування методом пошуку ми можемо сказати, що в даній ситуації він є найефективнішим. Йому трохи програє у часі метод швидкого сортування, тому він також є ефективним. Ми не можемо сказати, що інші два методи є неефективними, бо ефективність методу залежить від умов його застосування, але вони ідеально підходять для вивчення роботи потоків даних.
Оскільки останні два методи виконуються найшвидше, то клік по одному з двох останніх зелених кругів (TShapes) призупиняє відповідні їм потоки (ми керуємо властивістю Suspended), а клік по двох перших – зупиняє відповідні їм потоки (виконується Terminated).
Потоки створюються одразу ж з властивістю Suspended=False, що запускає потоки одразу ж по їх створенні. Всі вони мають властивість FreeOnTerminate=True, що завершує роботу потоків одразу ж по завершенні методу Execute. В головну программу передається параметр OnTerminate і виконується відповідна процедура ThreadDone.
Всі пересилання даних з потоків на форму виконуються синхронізовано процедурою Synchronize з метою уникнення помилкових ситуацій.