Szinkronizálása a Delphi

Ha több szálat az alkalmazás szükséges annak biztosítása, hogy az adott pillanatban csak egy szál férhet hozzá a tulajdonságok és módszerek a tárgy VCL - Delphi vizuális komponens, vagyis a cselekvés az áramlás a szinkronizálni kívánt egymással. Elvégzésére az ilyen szinkronizálás használják Delphi speciális módszer szinkronizálása. keretében, amelynek meg kell hívni rutinok tulajdonságait módosítják a vizuális komponenseket.

Szinkronizálása eljárás használja a paramétert, mint olyan eljárás, amelyben van módosítása vizuális tulajdonságainak alkatrészek és blokkok egyidejű hozzáférést több komponens árammal. Íme néhány példa a különösen tartalmazza a modul által generált varázsló létrehoz egy menet:

eljárás MyThread.Execute;
kezdődik
Szinkronizálás (UpdateCaption);
végén;

Ebben az esetben az áramot használnak változtatni a fejléc formákat. Cím változás következik be UpdateCaption eljárás. Úgy tűnik, hogy ez megváltozzon eljárás fejléc elég ahhoz, hogy a mag áramlási eljárás végrehajtása. Azonban, ha több ilyen szálak a programot ugyanakkor próbálja megváltoztatni a címet formák, ez vezethet kiszámíthatatlan következményekkel jár. Ennek elkerülése érdekében UpdateCaption Execute eljárást nevezik az eljárás, mint a módszer paraméter Szinkronizálás.

Meg kell tudni, hogy a szinkronizálása módszer végzik a fő alkalmazási menet. Ezért dolgozik több szálat az alkalmazás és alkalmazása szinkronizálása módszer, tartsa szem előtt, hogy:
  • Először is, része a hívás szinkronizálása gátolja végrehajtását a kérelem;
  • Másodszor, ha szinte az összes eljárások futó szál felhasználásával végzünk szinkronizálása módszer, a lényeg létrehozásában ilyen áramlás nem - még mindig működik, hogy tartanak a fő stream.
Példaként vegyük az összes ugyanazt a módosítást az űrlap fejléc. Tegyük fel, hogy van egy műveletet egy nagy tömb, és a kijelző igényel kötet tömb került feldolgozásra az egyik patakok. Ehhez gondoskodjon a szál, hogy ezt a munkát. Mi jelenik meg a fejlécben az űrlap elem indexe, amely kezeli a munkafolyamat abban a pillanatban. Ezáltal lesz a frekvencia 10 másodpercenként. Eleinte, ezt:

eljárás TMyThread.UpdateCaption;
kezdődik
míg Igaz do
kezdődik
Form1.Caption: = IntToStr (I); // I - egy globális változó a fő program, a tömb index
alvás (100);
végén;
végén;

eljárás TMyThread.Execute;
kezdődik
Szinkronizálás (UpdateCaption);
végén;

Lásd, hogy ez történik, mi van írva a fenti. Mivel az összes stream fejléc és a módosítás formája, és várjon hurok végezzük szinkronizálása módszer. és így az a fő stream, az alkalmazás megjelenik válaszol, és még nem kell kitölteni megfelelően.
Most megpróbáljuk, hogy a ciklus utáni szinkronizálás:

eljárás TMyThread.UpdateCaption;
kezdődik
Form1.Caption: = IntToStr (Cap);
végén;

Ez a helyes megoldás. A Szinkronizálás eljárás végrehajtására csak közvetlen módosítására formában fejléc és várjon hurok végezzük patak, és nem zavarja a fő stream.

Egyes tárgyak VCL szinkronizálása eljárásra nincs szükség, mivel még mindig képesek megfelelően működni az árral, vagy szükség más módszerek szinkronizálást. Tehát, hogy jól működik az áramlás
  • Components adatbázisok eléréséhez (a TSession komponens osztály). A kivétel egy Microsoft Access adatbázis;
  • osztályok, amelyek közvetlenül együttműködnek grafika. Ez Tfont-ot, TPEN, TBrush, TBitmap, TMetafile és Ticon. Vázlat a tárgyak ezen osztályok (Canvas) lehet használni az alkalmazása nélkül szinkronizálása módszer. Ez úgy történik, hogy zár a vásznon. Azaz, a menet által jelenleg használt vászon, pre-blokk vászon zár, megakadályozva más szálak dolgozni a vásznon, majd kinyit a kinyit.
Amellett, hogy a vizuális elemek szintén nem tud dolgozni TList listák patakok. Ezért, az áramlási kell használni TThreadList objektumokat, amelyek módszerek záró és szabaddá és locklist UnLockList.

Kapcsolódó cikkek