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.
- 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.
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.