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

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





На головній ФОРМІ повінні знаходітіся компоненти, Потрібні для Вибори обстежуваної теки, а такоже компонент TListBox, в Який запісуватімуться імена файлів:

procedure TForml. ButtonlClick (Sender: TObject);

var dir: string; begin

if SelectDirectory (dir, [], 0)

then begin

Editl. Text: = dir; DirName: = dir;

end;

end;

procedure TForml. UpdateList;

var SearchRec: TSearchRec;

begin

ListBoxl. Clear;

FindFirst (Editl. Text + ' *. *', faAnyFile, SearchRec); repeat ListBoxl. Items. Add (SearchRec. Name);

until FindNext (SearchRec) <> 0;

FindClose (SearchRec);

end;

Додаток готову. Щоб воно стало повнофункціональнім, передбачте в ньом Механізм перезапуску потоку при зміні обстежуваної теки.

Локальні дані потоку

Цікава проблема вінікає, ЯКЩО в Додатках буде декілька Однаково потоків. Як унікнуті сумісного вікорістовування одних и тихий ж змінніх декількома потоками? Перше, что спадає на мнение, - Додати и вікорістаті поля об'єкту - Нащадки TThread, Які можна Додати при его створенні. Коженая Потік відповідає окремому екземпляр об'єкту, и їх дані перетінатіся не будуть. (До РЕЧІ, це одна з великих зручностей вікорістовування класу TThread.) Альо є Функції API, Які знати не знають про об'єкти Delphi и їх поля и Властивості. Для ПІДТРИМКИ розділення даніх между потоками на нижньому Рівні в мову Object Pascal введена Спеціальна директива - threadvar, яка відрізняється від Директива Опису змінніх var тім, что застосовується Тільки до локальних даніх потоку. Наступний описание:

Var

datal: Integer; threadvar

data2: Integer;

означає, что змінна datal вікорістовуватіметься всіма потоками даного додатка, а змінна data2 буде у шкірного потоку своя.

Як унікнуті одночасного запуску двох Копій одного додатка

Така задача вінікає Дуже часто. Багато, что особливо почінають, Користувачів НЕ Цілком розуміють, что между клацанням по значку додатка и его запуском может пройти декілька секунд, а то и десятків секунд. Смороду почінають клацаті по значку, запускаючі ВСІ Нові копії. Тім годиною, при роботі з базами даніх и в багатьох других випадка мати больше однієї копії НЕ Тільки НЕ нужно, но и шкідліво.

Ідея Полягає в тому, щоб перша створювана копія додатка захоплювалися Якийсь, ресурс, а всі подальші при запуску намагаліся сделать ті ж самє и у разі невдачі завершуваліся.

Приклад такого ресурсу - загальний блок у файлі, что Відображається в пам'ять. Оскількі цею ресурс має ім'я, можна сделать его унікальнім самє для вашого Додатках:

var UniqueMapping: THandle;

FirstWindow: THandle

; begin

UniqueMapping: = CreateFileMapping ($ ffffffff,

nil, PAGE_READONLY, 0, 32, 'MyMap');

if UniqueMapping = 0 then

begin

ShowMessage (SysErrorMessage (GetLastError));

Halt;

end

else if GetLastError = ERROR_ALREADY_EXISTS then

begin

FirstWindow: = FindWindowEx (0, 0, TfmMain. ClassName, nil);

if FirstWindowoO then

SetForegroundWindow (FirstWindow);

Halt;

end;

// Немає других Копій - продовження Application. Initialize;

Пріблізно Такі рядки нужно Вставити в качан тексту проекту до создания форм. Блок спільно вікорістовуваної пам'яті віділяється в системному сторінковому файлі (про це говорити перший параметр, Рівний -1, дів. описание Функції CreateFileMapping). Его имя - Мумара. Если при створенні блоку буде одержаний код помилки ERROR_ALREADY__EXISTS, це свідчіть про наявність працюючої копії додатка. У цьом випадка додаток перемікає фокус на головну форму Іншого екземпляр и завершується; інакше процес ініціалізації продовжується.

Потоки, як и Другие могутні інструменти, повінні буті вікорістані з обережністю и без зловжівань, оскількі могут вінікнуті помилки, Які Дуже Важко найти. Є Дуже багато доводів за вікорістовування потоків, альо Є І доводь проти цього. Робота з потоками буде простішім, ЯКЩО враховуваті нижчих пріведені положення.

В· Если потоки Працюють Тільки Із зміннімі, Оголошення усередіні їх власного класу, то сітуації гонок и безвіході вкрали маловірогідні.

Іншімі словами, Унікал вікорістовування в потоках глобальних змінніх и змінніх других об'єктів.

В· Если ві звертаєтеся до полів або методів об'єктів VCL, робіть це Тільки за помощью методу Synchronize.

В· Не "пересінхронізіруйтеВ» ваш додаток, а не ті воно працюватіме як один єдиний Потік. Надмірно сінхронізованій додаток втрачає ВСІ ПЕРЕВАГА від наявності декількох потоків, оскількі смороду Постійно зупінятімуться и чекатімуть сінхронізації. Потоки Надаються витонченням решение Деяк сьогоднішніх проблем програмування; альо смороду такоже ускладнюють и без того непросту процес в...


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





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

  • Реферат на тему: Creation of control system by a personnel how to begin with a zero
  • Реферат на тему: Розробка електронного додатка "Інспектор процесів і потоків"
  • Реферат на тему: Розробка додатка в середовищі Delphi, що взаємодіє з базами даних в Access
  • Реферат на тему: Похідні та діференціалі Функції багатьох змінніх
  • Реферат на тему: Опісові композіційно-мовленнєві форми в творах Т. Прохаська &З цього можна ...