Робота з потоками в CBuilder

Коли я вимовляю слово thread (потік дослівно: нитка), про що ви думаете1 Про невеликих білих шматочках бавовни на вашому діловому костюмі Про мотках для вязання з уткнутими спицями У компютерній індустрії, однак, слово thread означає щось зовсім інше

Потоки (threads) в компютерному світі позначають паралельні процеси, які працюють усередині вашої програми Ваша програма складається з потоків, хоча ви, напевно, ніколи про це не замислювалися Коли ви відображаєте форму на екрані, вона працює в потоці Зазвичай всі форми програми запущені в одному і тому ж потоці такий додаток називається однопоточні (single-threaded) Коли ви використовуєте більше одного потоку в додатку, ваша програма називається багатопотокової або мультіпоточной (multi-threaded) Ось так Ви знаєте все, що потрібно, про потоках Ну, не зовсім Є ще парочка питань: Що таке насправді потоки Навіщо вони мені потрібні Як їх використовувати Відповіді на всі ці питання ви знайдете тут, в розділі, присвяченому потокам і їх використання в додатках CBuilder

1Последующее нижче міркування про нитках відбувається через те, що в англійській мові для терміна потік застосовується слово thread (нитка) – Прямуючи перев

Потік – це просто код, який виконується, причому часом, відведеним на виконання даного коду, управляє операційна система, а не програма Коли у вас кілька функцій в програмі працюють паралельно, то виконання функцій контролюється логікою вашої програми Виконання потоку управляється кількістю часу, відведеного потоку операційною системою Всі потоки працюють паралельно в додатку і знаходяться в одному і тому ж глобальному адресному просторі додатка Це означає, що потік може спілкуватися з усім тим у вашій програмі, про що він знає Потоку доступні глобальні змінні, а також глобальні обєкти Потік схожий на міні-програму, що працює всередині вашої власної програми

Навіщо потрібні потоки У старі недобрі часи програмування під MS-DOS ми створювали TSR (Terminate and Stay Resident), тобто резидентніпрограми TSR – фонова програма, яка виконується, поки операційна система зайнята іншими речами Резидентні програми були зручні для перехоплення натискань певних клавіш, фонової роботи з принтером, оновленні часом у годинах на екрані і т д Ці тварюки були дуже обмеженими за можливостями, і їх треба було писати в основному на асемблері, щоб вони були якомога менше і швидше

Коли настала ера програмування під Windows, програми стали працювати звичайним чином Менеджер процесів в Windows міг сказати програмі, щоб вона зупинилася, і запустити другий, але поки від другої програми не приходило підтвердження запиту, продовжувала виконуватися перша Windows 95 і Windows NT є ​​«пануючими» операційними системами і можуть дійсно управляти системою, зокрема зупиняти працюючу програму Тоді запускаються інші програми на рівні операційної системи Потоки ж є самостійним утворенням в тому сенсі, що ви можете тимчасово призупинити потік і знову його запустити, але закінчення його роботи є винятковою прерогативою потоку Операційна система, звичайно, може вбити потік (як звичайно називають завершення його роботи) в будь-який момент часу Ваша ж програма, хоча вона і породила цей потік, може тільки призупинити його

У цьому розділі ми починаємо досліджувати програмування потоків: навіщо і для чого вони вам можуть знадобитися і як ви можете з ними спілкуватися Ми розглянемо приклади потоків від простого відображення форм до складних межпотокових комунікацій Наприкінці глави ви станете більше розбиратися не тільки в тому, як використовувати потоки у вашому додатку, але також і в тому, коли варто їх використовувати

Якщо ви деякий час працювали в Windows, то ви, мабуть, знайомі з фоновими (background) процесами, які виконуються під час простою, коли ваша програма не обробляє введення даних від користувача і не здійснює ще яку-небудь дію за запитом користувача В системі CBuilder є вбудована підтримка обробки часу простою (idle time), але використання потоків є кращим методом для фонової роботи У потоку є маса переваг перед системою обробки часу простою По-перше, вам не потрібно турбуватися про час, який займає якась операція По-друге, якщо вам потрібно робити кілька речей у фоновому режимі, то вам доведеться якимось чином самому розподіляти час між цими завданнями Вам доведеться запускати перші завдання, зупиняти її, запускати другу і т д Потокова система вже має вбудоване розподіл часу і керування процесами

Друга причина, по якій варто використовувати потоки, полягає в тому, що потоки не заважають нормальній обробці повідомлень у вашому додатку Якщо ви писали цикли фонової обробки в стандартному додатку Windows (без використання бібліотек класів типу MFC), то ви, напевно, помічали, що ваш алгоритм еквівалентний циклу обробки повідомлень Звичайно цикли фонової обробки виглядають приблизно так:

while ( done )

{

/ / Відбувається якась обробка

/ / Обробляти всі очікують у черзі повідомлення,

/ / Інакше вся система зупиниться while (GetMessage (& msg)) DispatchMessage (& msg)

}

Сенс цього коду полягає в тому, щоб переконатися, що цикл фонової обробки не застопорить обробку повідомлень Але якщо ви пішли по такому шляху, то вам доведеться турбуватися про повторне вході в ваш код, множинних викликах вашого коду з різних місць і про те, як відстежити, в якому стані ви перебуваєте При використанні потоків вам доведеться турбуватися тільки про те, що вам потрібно зробити, а про решту потурбується система

Джерело: Теллес М – Borland C + + Builder Бібліотека програміста – 1998

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*