Теми рефератів
> Реферати > Курсові роботи > Звіти з практики > Курсові проекти > Питання та відповіді > Ессе > Доклади > Учбові матеріали > Контрольні роботи > Методички > Лекції > Твори > Підручники > Статті Контакти
Реферати, твори, дипломи, практика » Новые рефераты » Робота з "потоками" в середовіщі Delphi

Реферат Робота з "потоками" в середовіщі Delphi





вірку слів.

На цьом завершимость доповідну Огляд класу TThread. Для Ближче Знайомство з потоками и класом Delphi TThread створімо багатопотоковій додаток. Для цього нужно напісаті Всього декілька рядків коду и кілька разів клацнути Мішею.

Засоби сінхронізації потоків

Простіше Всього Говорити про сінхронізацію, ЯКЩО створюваній Потік НЕ взаємодіє з ресурсами других потоків и НЕ звертається до VCL. Припустиме, у вас на комп'ютері декілька процесорів, и ві хоче В«розпаралелюватіВ» обчислення. Тоді Цілком Доречний Наступний код:

MyCompThread: = TComputationThread. Create (False);

// Тут можна що-небудь делать, поки другий Потік віробляє обчислення

DoSomeWork;

// Тепер чекаємо его Завершення

MyCompThread. WaitFor;

Наведено схему абсолютно неприпустима, ЯКЩО во время своєї роботи Потік MyCompThread звертається до VCL за помощью методу synchronize. У цьом випадка Потік чекає головного потоку для звернення до VCL, а тієї, у свою черго, йо - класична безвіхідь.

За В«спасенияВ» слід звернута до програмного інтерфейсу Win32. ВІН надає Багатий набор інструментів, Які могут знадобітіся для організації Спільної роботи потоків.

Головні Поняття для розуміння механізмів сінхронізації - Функції Очікування и об'єкти сінхронізації. У Windows API Передбачення ряд функцій, что дозволяють пріпініті Виконання потоку, что віклікав Цю функцію, аж до того моменту, як буде зміненій стан якогось об'єкту, званого об'єктом сінхронізації (Под ЦІМ терміном тут розуміється НЕ об'єкт Delphi, а об'єкт операційної системи). Проста з ціх функцій - waitForSingieCbject - Призначено для Очікування одного об'єкту.

До можливіть варіантів відносяться Чотири об'єкти, Які розроблені спеціально для сінхронізації: Подія (event), взаємне віключення (mutex), семафор (semaphore) i таймер (timer).

Альо окрім спеціальніх об'єктів можна організуваті Очікування и других об'єктів, дескриптор якіх вікорістовується в основному для других цілей, альо может застосовуватіся и для Очікування. До них відносяться: процес (Process), Потік (thread), сповіщення про зміну у файловій Системі (change notification) i консольних введення (console input).

Побічно до цієї групи может буті додана критична секція (critical section).

Примітка

Перераховані Вище засоби сінхронізації в основному інкапсульовані до складу класів Delphi. У програміста є Дві альтернативи. З одного боці, до складу бібліотеки VCL включень модуль SYNCOBJS.PAS, что містіть класи для події (TEvent) i критичної секції (TCriticalSection). З іншою, з Delphi поставляється відмінний приклад IPCDEMOS, Який ілюструє проблеми взаємодії процесів и містіть модуль IPCTHRD.PAS з аналогічнімі класами - для тієї ж події, взаємного віключення (TMutex), а такоже спільно вікорістовуваної пам'яті (TSharedMem).

Перейдемо до докладного Опису об'єктів, вікорістовуваніх для сінхронізації.

Подія

Об'єкт типом Подія (event) - простий вибір для задач сінхронізації. ВІН подібний дверному дзвінку - Дзвени до тихий ПІР, поки его кнопка находится в натиснута стані, сповіщаючі про цею факт оточуючіх. Аналогічно, и об'єкт может буті в двох станах, а В«чутиВ» его могут багатая потоків відразу. Клас TEvent (модуль SYNCOBJS.PAS) має два методи: setEvent и ResetEvent, Які переводящем об'єкт в активний и пасивний стан відповідно. Конструктор має Наступний вигляд:

constructor Create (EventAttributes: PSecurityAttributes;

ManualReset, InitialState: Boolean; const Name: string);

Тут параметр initialstate - початковий стан об'єкту, ManualReset - способ его Скиданом (перекладу в пасивний стан). Если цею параметр Рівний True, Подія винна буті скинутися уручну. Інакше Подія скідається у міру того, як стартує хоч один Потік, что Чека даного об'єкту.

На третьому методі:

TWaitResult = (wrSignaled, wrTimeout, wrAbandoned, wrError);

function WaitFor (Timeout: DWORD): TWaitResult;

Зупинимо докладніше. ВІН Дає можлівість чекати актівізації події ПРОТЯГ Timeout мілісекунд. Як ви могли здогадатіся, усередіні цього методу відбувається виклик Функції waitFotsingieObject. Типових результатів на віході waitFor два - wrsignaied, ЯКЩО Відбулася актівізація події, и wrTimeout, ЯКЩО за годину тайм-ауту Нічого НЕ відбулося.

Примітка

Если нужно (і допустимо!) чекати Нескінченно довго, слід Встановити параметр Timeout в значення INFINITE.

Розглянемо маленький приклад. Включімо до складу нового проекту об'єкт типу TThread, наповнівші его метод Execute Наступний вмістом:

Var res: TWaitResult;

procedure TSimpleThread. Execute;

begin

e: = TEvent. Create (nil, True, false, 'test');

repeat

e. ReSetEvent;

res: = e. WaitFor (10000);

Synchronize (Showlnfo...


Назад | сторінка 6 з 10 | Наступна сторінка





Схожі реферати:

  • Реферат на тему: Подія в журналістському тексті (на прикладі публікацій про події на Україні ...
  • Реферат на тему: Подія в журналістському тексті (на прикладі публікацій про події на Україні ...
  • Реферат на тему: Опісові композіційно-мовленнєві форми в творах Т. Прохаська &З цього можна ...
  • Реферат на тему: Грошовий потік
  • Реферат на тему: Грошовий фінансовий потік