Ако използвате няколко теми в заявката е необходимо да се гарантира, че в момента само една нишка да получите достъп до свойствата и методите на обект VCL - Delphi визуален компонент, т.е. действието на потока, който искате да синхронизирате с друг. За извършване на такава синхронизация се използва в Delphi специален метод Синхронизиране. в рамките на който трябва да се обадя съчетания, които променят свойствата на визуалните компоненти.
Синхронизиране процедура използва параметъра като тези процедури, при които има модификация на визуални свойства на компонентите и блокове едновременен достъп до множество потоци компонент. Ето някои пример, по-специално съдържа модул, генерирани от инструкциите създаде нишка:
процедура MyThread.Execute;
започвам
Синхронизиране (UpdateCaption);
приключи;
В този случай, потокът се използва за промяна на формите заглавието. промяна заглавието се среща в процедура UpdateCaption. Тя ще изглежда, да се промени тази процедура заглавна е достатъчно, за да предизвика процедура ядро поток, Execute. Все пак, ако някои от тези теми в програмата в същото време се опита да промени заглавието на форми, тя може да доведе до непредвидими последици. За да избегнете това UpdateCaption процедура Execute се нарича в процедурата като параметър метод синхронизирате.
- Първо, част от синхронизиране на повикване инхибира изпълнение на заявлението;
- На второ място, ако почти всички процедури, работещи конец се извършва чрез използване на метода на Синхронизиране, въпросът за създаването на такъв поток не е - той все още се работи, за да се проведе в основния поток.
процедура 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, предотвратяване на други теми, да се работи с платното, а след отключване чрез отключване.
Свързани статии