A delphi, vr-online szálakkal való együttműködés alapja mindenki számára ingyenes e-zine

Így a szálak fő jellemzője, hogy majdnem párhuzamos (vagy tudományosan pszeudo-párhuzamos) szinte, és nem egészen végrehajtható. Valójában a valóságos párhuzamosság csak többprocesszoros gépen lehetséges (2 vagy több protézissel). De a WiNdoWs utánozhat egy ilyen munkát (és nem hibáztathatja őt erre, ha hibáztat, majd olvassa el a fentieket). mindegyik szálra (Windoz) kis mennyiségű processzor időtartamot (néhány milliszekundumot) oszt meg, ennek az idő leteltével a varázsló egy másik szálat, majd a következőt és így tovább. És amint azt valószínűleg már kitalálta, minden egyes téma esetében meghatározták a megfelelő végrehajtási prioritást. Egyszerűen fogalmazva, amikor kódot írunk, meg tudjuk mondani a rendszernek, hogy milyen gyakran kell elosztani a CPU időfolyamot. Ezt az alábbiakban ismertetjük.

Szeretném megjegyezni, hogy az Inprise nem javasolja, hogy több mint 16 szálat hozzanak létre a programban, ha a program egy processzoros gépen fut.

Ezzel az elmélettel talán befejezheti és megy a programozásra. Többszálú szoftver termék (a szoftvertermék jó kifejezés).

2. Lépés Új alkalmazás létrehozása (Fájl-> Új alkalmazás).

3. lépés. A megjelenített formában dobja el az egyik gombot (nekem Button1) és két rajzterületet (számomra PaintBox1 és PaintBox2 lesz).

4. lépés: A fő formamodulban írjuk le az új módszert (kapok gtextout), amely paraméterként megkapja a vásznat, és bármilyen szimbólumot nyomtat (bármelyik "@" kifejezés nélkül).

4.1. Lépés. Nézzük részletesen, hogyan kell végrehajtani a fent említett cselekvést a gyakorlatban.

Hozzon létre egy új eljárást. Írja be a gtextout (CNV. TCanvas) eljárást a magánszó előtt. A jobb oldali egérgombbal kattintson a Davi-ra és a megjelenő menüben válassza a "Comlete class at cursor" -ot (véleményem szerint így van írva (Delphi3 etogo még mindig nem létezik).

Ha mindent megtett, akkor a következőket kell látnia:

Tovább mennünk. A kezdet és a vég között írja be a kódot az 1. listából.

Azt hiszem, részletesebb magyarázatokban, a listázás1 nem szükséges, csak azt mondom, hogy a TextOut módszer általában a következő formában lesz: TextOut (koordinátája_X, koordináta_t_Y, output_ymbol_); (Ne felejtsük el, hogy a TCanvas objektum metódusát használja, egyébként az API TextOut funkciót hívják, amely szintén szövegkimenetre van szánva, de különbözik a paraméterek számától és típusától).

Ezután még csak 2 lépést kell hozzáadni a fentiekhez

Között kezdődik, és vége beírását gTextOut (PaintBox1.Canvas), és a második gTextOut (PaintBox2.Canvas). A gyakorlatban ez úgy néz ki, mint ez:

Ezeket a módszereket Canvas paraméterként kapjuk, majd a gTextOut rutin kinyomtat egy kutyát (@) ezen a vászonon. Miért tettük ezt így?

Az a tény, hogy amikor az osztálymódokat egyidejűleg több szálból hívják, ez nem kívánatos következményekhez vezethet. Például problémák merülhetnek fel, amikor a képernyőn megjelenő képfeldolgozási folyamat váltakozik, amikor a rendszernek más osztályú tárgyakat kell feldolgoznia.

Nos, most menjünk le erre, valójában azért, mert itt vagyunk, vagyis áramlást hozunk létre. Kattintson a Fájl-> Új-> Szál objektum elemre.

A létrehozott párbeszédpanelen az osztályneveket a TMyThread jelöli. Ez az osztály örökli a TThread szálosztályt. Ezután megjelenik egy fájl, amely ennek az osztálynak az üres leírását tartalmazza.

Most térjünk vissza esetleges hibánkhoz (1. pont), és fogalmad sincs, miért teremtettünk 2 "extra" eljárást. Az ilyen hibák elkerülése végett (lásd az 1. mondatot), az ilyen módszerek garantált biztonságos végrehajtásának módját a Téma osztály határozza meg. Ez a módszer felelős az összes szál összehangolásáért. És mivel a paraméter csak a módszer nevét kapja meg. Ezért kellett 2 eljárást létrehozni. Itt van a szinkronizációs módszer leírása:

Tovább mennünk. De itt van még egy probléma: hogyan kell meghatározni a szálon belül, hogy milyen módszert kell hívni pillanatnyilag? A kérdés megválaszolásához bemutatunk egy Boolean típusú változót a W névvel. Akkor, amikor létrehozunk egy patakpéldányt, hozzárendeljük azt a TRUE értéket, ha a OUTD1 és FALSE módot kell végrehajtanunk OUTD2 esetén.

Maga a folyamat leírása az Execute metódusban található. A módszer újradefiniálása után a következőket kapjuk.

Szóval, mi vagyunk itt? A Lezárt tulajdonság értéke TRUE, ha a program kap egy értéket a kikapcsolásról. => Mi fogunk dolgozni, amíg a program befejeződik. Ha w = true, akkor az OUTD1 eljárás hívásra kerül, különben OUTD2.

Most a végrehajtási szakaszban írja be a következőket: uses1; (Csatlakoztassa a modult1);

Most menj az első egységhez (unit1), kösd össze az Uni2-et. Ezután hozzon létre egy eseménykezelőt a Button1 számára, és írja be a 2. listát.

Mit tettünk itt? A sorban két változót írunk le, ezek a jövőbeli szálak. A vonal hozunk létre egy új szálat a Create eljárás, amely egy paraméter úgy van beállítva, hogy Igaz, ha a folyam indul hívása után a Folytatás eljárás, és hamis, ha a patak indul azonnal a létrehozása után. A sorban állítsd be a W változó értékét (emlékszel erre a kigúzásra), a sorban a szál elsőbbségét állítjuk be.

Ennek a tulajdonságnak a lehetséges értékei az alábbiak:

tpTimeCritical - Maximális prioritás
tpHighest - Prioritás 2 pont a norma fölött
tpHigher - Prioritás 1 pont a norma fölött
tpNormális - Normál prioritás
tpLower - Prioritás 1 pont a normálnál alacsonyabb
tpLowest - A prioritás 2 pont a norma alatt
tpIdle - A szálat akkor hajtják végre, ha az operációs rendszernek semmi köze

Ui Nos, mint minden. Példa azonban szerény, de még mindig kognitív. Talán adok egy kis tanácsot. Van egy kicsi programod kódja, de próbálsz valamit benne, valamit eltávolíthatsz vagy valamit hozzáadhatsz, majd megnézheted, mit tehetsz, sokkal hasznosabb lesz, ha elolvastad, és azt mondod magadnak, hogy világos! és felejtsd el. Általában a választás a tiéd. Csak azt mondhatom, hogy Kod @ Chi a kódolásban, a lányoknál (buta, jól értsd meg érted), és a nagy Ud @ Chi a Session-ban (ha te olyan diák vagy, mint én). ... Ha bármilyen kérdése van, akkor írj ([email protected]) Megpróbálok válaszolni. Szia.

Írta: Litex [[email protected]]

A példa forráskódja itt található:

Kapcsolódó cikkek