ПредишенСледващото

Ако използвате няколко теми в заявката е необходимо да се гарантира, че в момента само една нишка да получите достъп до свойствата и методите на обект VCL - Delphi визуален компонент, т.е. действието на потока, който искате да синхронизирате с друг. За извършване на такава синхронизация се използва в Delphi специален метод Синхронизиране. в рамките на който трябва да се обадя съчетания, които променят свойствата на визуалните компоненти.

Синхронизиране процедура използва параметъра като тези процедури, при които има модификация на визуални свойства на компонентите и блокове едновременен достъп до множество потоци компонент. Ето някои пример, по-специално съдържа модул, генерирани от инструкциите създаде нишка:

процедура MyThread.Execute;
започвам
Синхронизиране (UpdateCaption);
приключи;

В този случай, потокът се използва за промяна на формите заглавието. промяна заглавието се среща в процедура UpdateCaption. Тя ще изглежда, да се промени тази процедура заглавна е достатъчно, за да предизвика процедура ядро ​​поток, Execute. Все пак, ако някои от тези теми в програмата в същото време се опита да промени заглавието на форми, тя може да доведе до непредвидими последици. За да избегнете това UpdateCaption процедура Execute се нарича в процедурата като параметър метод синхронизирате.

Трябва да знаете, че методът за Синхронизиране се извършва в основната нишка приложение. Ето защо, работа с множество нишки в заявлението и прилагане на метода Синхронизиране, имайте предвид, че:
  • Първо, част от синхронизиране на повикване инхибира изпълнение на заявлението;
  • На второ място, ако почти всички процедури, работещи конец се извършва чрез използване на метода на Синхронизиране, въпросът за създаването на такъв поток не е - той все още се работи, за да се проведе в основния поток.
Като пример, под внимание всички същата модификация на заглавната част на форма. Да предположим, че има работа с голям масив, и на дисплея се изисква обем масив е преработен в един от потоците. За да направите това, да организира нишката, която ще си свършат работата. Ще се показва в заглавката на индекса на форма елемент, който управлява потока на работа в момента. Така ще бъде с честота от 10 пъти в секунда. На първо място, да направите това:

процедура TMyThread.UpdateCaption;
започвам
докато Вярно задачи
започвам
Form1.Caption: = IntToStr (I); // I - глобална променлива на основната програма, индексът на масива
сън (100);
приключи;
приключи;

процедура TMyThread.Execute;
започвам
Синхронизиране (UpdateCaption);
приключи;

Виж, че това се случва, е това, което е написано по-горе. Тъй като всички код поток горния и модификация форми и изчакайте цикъл се извършва в метод Синхронизиране. и по този начин в основния поток, приложението ще се появи не реагира, и то дори няма да бъде завършена правилно.
Сега ние ще се опитаме да донесе на цикъла отвъд Синхронизиране:

процедура TMyThread.UpdateCaption;
започвам
Form1.Caption: = IntToStr (Cap);
приключи;

Това е правилната опция. По метод Синхронизиране се извършва само директно глава модификация форма и чака линия се извършва в потока, и не пречи на главния поток.

не се изисква Някои обекти VCL Синхронизиране процедура, тъй като те все още са в състояние да работят правилно по течението, или да изискват други методи за синхронизация. Така че, за да работи правилно с потока
  • Компоненти достъп до база данни (като се използва клас TSession компонент). Изключение е база данни на Microsoft Access;
  • класове, които работят директно с графика. Тя TFont, TPen, TBrush, TBitmap, TMetafile и TIcon. Описание на обектите на тези класове (Canvas) може да се използва без да се прилага методът Синхронизиране. Това става чрез блокиране на платното. Това означава, че нишката в момента използва платно, предварително блок платно от Lock, предотвратяване на други теми, да се работи с платното, а след отключване чрез отключване.
В допълнение към визуалните компоненти също не са в състояние да работят с TList списъци потоци. Поради това, потокът трябва да използвате TThreadList обекти, които имат методи за отключване и заключване и LockList UnLockList.

Свързани статии

Подкрепете проекта - споделете линка, благодаря!