Class tthread - 29. fejezet

Delphi programozó teljes hozzáférést Win32 programozási felület képességeit. Akkor miért a cég Borland bevezetett egy különleges osztály megszervezésére flow? Általánosságban elmondható, hogy a programozó nem szükséges, hogy megértsék a bonyolult mechanizmusok által kínált operációs rendszer. Az osztály kell párosítani és egyszerűsíti a szoftver interfész; TThread osztály - egy tökéletes példa a fejlesztő könnyen elérhető programozási patakok. API maga folyik, általában nem túl bonyolult, de mivel a TThread lehetőségek általában rendkívül egyszerű. Dióhéjban csak annyit kell tennie -, hogy felülbírálja a virtuális módszer végrehajtása.

Egy másik sajátossága az osztály TThread - garantálja a biztonságos működés a könyvtár vizuális komponenseket VCL. Használata nélkül TThread osztály alatt VCL felhívható helyzeteket, amelyek különös szinkronizáció (lásd. Sec. „Problémák szálszinkronizációt” később ebben a fejezetben).

Tisztában kell lennie azzal, hogy az operációs rendszer szempontjából, az áramlás - az a tárgy. Létrehozásakor megkapja a leíró és az operációs rendszer nyomon követhető. osztály objektum TThread - Delphi az építőiparban megfelelő OS menet. Ez az objektum jön létre VCL az igazi előfordulása áramlás a rendszerben, és eltávolították az eltűnése után.

Tanulmányozása TThread kezdeni az Execute eljárás:

eljárás végrehajtása; virtuális; elvont;

Ezt a kódot kell végrehajtani, az előállított TThread patak.

Bár a hivatalos leírást a Execute - módszer elméleti, de a mester, létrehozva egy új objektumot TThread teremt egy üres sablont ezt a módszert.

Újradefiniálása az Execute eljárás, akkor így feküdt egy új folyam osztály lesz végrehajtva induláskor. Ha az adatfolyam jött létre egy érv CreateSuspended, hamisra, az Execute metódus lefut azonnal, különben a hívás után végezzük az Execute eljárás folytatása (lásd. Tervező az alábbi leírást).

Ha az adatfolyam tervezték egységes végrehajtását bizonyos tevékenységek, akkor nincs külön befejezését belüli kód futtatása írási nem szükséges.

Ha az adatfolyam kerül végrehajtásra minden ciklusban, és a patak kell kitölteni a kérelmet, a záró feltételnek kell a:

Amíg CancelCondition vagy megszüntették;

Ott CancelCondition - a személyes állapota folyás végéig (.. kimerülése az adatok, a befejező számítási áramlását a bemeneti egy karakter, stb), és Lezárt ingatlan tájékoztatja flow befejezése (az ingatlan egyaránt megtalálhatók belső menet és a külső valószínűleg lezárult, hogy villás azt).

kivitelező létrehozása (CreateSuspended: Boolean);

kap beállítás CreateSuspended. Ha az érték az Igaz, az újonnan létrehozott szál kezd el kell végezni, amíg a hívás folytatása módszer. Ha CreateSuspended paraméter False, a kivitelező befejezi, és csak ezután kezdődik végrehajtás áramlását.

destructor elpusztítani; felülbírálhatja;

Elpusztítani destructor hivatkoznak, amikor az szükséges, hogy a létrehozott áram megszűnik. Destructor kiegészíti azt, és felszabadítja az összes erőforrás objektumhoz társított TThread. funkció megszüntetése: egész;

Ahhoz, hogy teljes a végső áramlását (nélkül későbbi indításkor) van megszakítása módszerrel. De ha úgy gondolja, hogy ez a módszer teszi néhány végrehajtási intézkedés megállítani az áramlást, tévedsz. Minden, ami történik, - a tulajdonságok beállításával

ingatlan Lezárt: Boolean;

Igaz. Így Megszakítás - jelzi az áramlás végére, a „kíméletes módon,” a képesség, hogy megfelelően kiadja forrásokat. Ha kell befejezni az áramlás azonnal használhatja a Windows API TerminateThread funkciót.

Fejezze metódus automatikusan meghívásra a destruktor az objektum. Flow-VCL ​​objektum fog várni, amíg a teljes áramlási objektum operációs rendszer. Így, ha a folyam nem fejeződött be megfelelően, hívja a destruktor potenciálisan összeomlik a program.

Egy másik hasznos szolgáltatása:

ingatlan FreeOnTerminate: Boolean;

Ha ez a tulajdonság True, a romboló fogják hívni automatikusan átfolyik a végén. Ez nagyszerű azokban az időkben, amikor a program nem tudja pontosan, mikor lesz vége áramlását, és szeretné használni az elv a „tűz és felejtsd el” (tűz és elfelejti).

működni waitfor: egész;

Waitfor módszert használjuk szinkronizálásra, és lehetővé teszi, hogy egy szál kell várni, amíg a másik szál végét. Ha írunk kódot FirstThread flow

ez azt jelenti, hogy FirstThread áramlás leáll, amíg SecondThread folyás végéig. Waitfor eljárás visszajuttat egy teljesítési kódot várható fluxus (lásd. ReturnValue tulajdonság).

ingatlan Handle: THandle olvasni FHandle;

ingatlan threadid: THandle olvasni FThreadID;

Kezelje tulajdon és threadid ad a programozó közvetlen hozzáférést biztosít a patak API Win32 jelenti. Ha egy fejlesztő akar foglalkozni, és kezeli az áramlás megkerüli a TThread lehetőségek, értékek és threadid Handle használható érveket a Win32 API függvényeket. Például, ha egy programozó akar futtatni az alkalmazást, mielőtt a további várakozás befejezése több szál, meg kell hívni az API waitForMuitipieObjects funkció; meg kell hívni egy tömböt leíró patakok.

ingatlan Prioritás: TThreadPriority;

Prioritás tulajdonság lehetővé teszi, hogy kérjen, és állítsa be a kiemelt patakok. Prioritások áramlás a fentiekben részletesen ismertettük. Az érvényes értékek a kiemelt TThread tárgyak tpidle, tpLowest, tpLower, tpNormai, tpHigher, tpHighest és tpTimeCritical.

eljárás Szinkronizálás (Módszer: TThreadMethod);

Ez a módszer tárgya védett rész, azaz a. E. Nevezhetjük csak leszármazottai TThread. Delphi nyújt a programozó Szinkronizálás módszerrel

A biztonságos hívás folyik benne VCL módszerekkel. Az összeférhetetlenség elkerülése, szinkronizálhatja módszer biztosítja, hogy minden objektum egyaránt VCL hozzáférés csak egy szál. Az argumentum a szinkronizálás módszer - a módszer neve, amely utal a VCL; Szinkronizálása kihívás ez a lehetőség - ez ugyanaz, mint a hívást a módszert. Ez a módszer (TThreadMethod osztály) is rendelkeznek paraméterekkel, és nem ad vissza semmilyen értéket. Például meg kell adnia a funkció a fő alkalmazási forma

eljárás TMainForm.SyncShowMessage; kezdődik

ShowMessagedntToStr (ThreadListl Count.)); // egyéb utalást VCL

és áramban kapcsolatos üzeneteket nem írok

Készítése hivatkozás semmilyen tárgyat VCL áramlási, biztosítja, hogy ha ezt a módszert használják Szinkronizálás; különben az eredmény kiszámíthatatlan. Ez akkor is igaz, ha használja a szinkronizálás segítségével, az alábbiak szerint.

Folytatás TThread osztály módszer akkor aktiválódik, ha a menet folytatódik végrehajtása után megáll, vagy kifejezetten elindítani az áramlás létrehozott paraméter CreateSuspended egyenlő True.

Calling felfüggesztés felfüggeszti a menettel, újraindítás később. Eljárás felfüggesztésére felfüggesztheti áramlás függően kód futtatható áramlását a pillanatban végrehajtása folytatódik a töréspont.

ingatlan Felfüggesztett: Boolean;

függeszteni a tulajdonság lehetővé teszi, hogy a programozó határozza meg, ha a szál van függesztve. Ezzel a tulajdon, az is lehetséges, hogy start és stop az áramlást. Telepítése felfüggesztett tulajdonságot True, akkor ugyanazt az eredményt kapjuk, mint ha hívja a módszer felfüggesztés - felfüggesztését. Fordított helyzetben, a False ingatlan Felfüggesztett értéke folytatja a végrehajtást áramlás Hívás folytatása módszer.

ingatlan ReturnValue: integer;

ReturnValue tulajdonság lehetővé teszi, hogy ellenőrizze és állítsa be a visszatérési értéke az áramlás a végén. Ez az érték teljesen határozza meg a felhasználó. Alapértelmezésben a folyamat visszatér nulla, de ha a programozó akar visszatérni egy másik értéket, egy egyszerű újratelepítése tulajdonságai a patak ReturnValue fogja ezt az információt más szálak. Ez például akkor lehet hasznos, ha problémák voltak a patak, vagy a tulajdon ReturnValue hogy vissza kell térni a szám nem felelt meg a helyesírási teszt szó.

Ezzel befejeződött a részletes áttekintést osztály TThread. Ahhoz, hogy jobban ismerik az áramlás az osztály és a Delphi TThread hozzon létre egy többszálas alkalmazás. Ehhez meg kell írni csak néhány sornyi kódot, és néhány kattintás az egérrel.


Kapcsolódó cikkek