[elektro] idoosztasi strategia

Erdos Zoltan silverst at t-online.hu
Sat Jul 30 11:09:59 CEST 2011


nekem  a szinpadi gepem maig egy p1-es, nogui.
ha nagyon kell kezzel egy w98-at elindithatok, de emlekeim szerint iden 
nem inditottam.
minden progi 6-os pascalban van rajta. szinpadon, elesben sosem hagyott 
cserben...


2011.07.30. 11:00 keltezéssel, Ábrahám Gábor írta:
> Ha nem kell mást csinálnia a gépnek, akkor minek a Windows?
> Lehet DOS-t használni. (Nálunk ez van.)
> Amúgy régen, volt a NoGUI indítás, amikor el se indul a grafikus felület,
> (XP óta nem próbáltam.)
>
> Gábor
>
>
> ----- Eredeti üzenet -----
> From: Karoly Kovacs
> Sent: Saturday, July 30, 2011 6:15 AM
> To: elektro at tesla.hu
> Subject: Re: [elektro] idoosztasi strategia
>
> Hehe!
> Amit en ajanlok, az nem hivatalos, csak amolyan sufni megoldas, sot,
> hulyeseg, de nekem mindig mukodott.
> Ha tenyleg nincs mas, amit a windozos gepnek csinalnia kell, el kell
> inditani az alkalmazasodat, majd ki kell loni a Windows Explorer-t. :)))
> Szarnyakat kap a gep. :))) De tenyleg, sokszorosara megno az
> alkalmazasod "teljesitmenye".
> (Utana persze vagy restart, vagy ujra kell inditani az explorert.)
>
> De - ismetlem - ez igazandibol egy nagy marhasag! Neha azert jo johet ez
> a kis hatterinfo.
> (Ja, es csak XP-ben probaltam ki.)
>
> Karoly
>
> On 29.07.2011 18:05, Nemeth Tibor wrote:
>> Hali!
>>
>> Évtizedek óta írok adatgyűjtő és vezérlő programokat de nem igazán érzem
>> hatékonynak ahogy csinálom. Ezzel kapcsolatban kérem tanácsotokat.
>> Régen DOS alatt, viszonylag hardverközeli megoldások is szóba jöttek,
>> akár hardver interrupt kezelés is. Amióta rákényszerültem a windows-ra
>> ezzel már nem kísérletezem. A példák, mivel Delphiben nyomulok, pascal
>> szintaxissal lesznek, de gondolom, nem ez a lényeg.
>> Nézzük mi is a gondom: A windows arra van kitalálva, hogy a juzer
>> kattintgat és ennek hatására lefutnak eljárások, esemény kezelők. Ezek
>> rövid lefutású részprogramok. Ezzel szemben egy mérőprogram akár napokig
>> is futhat, noha lehetséges, hogy egy hét alatt lesz annyi dolga a
>> CPU-nak mint mondjuk egy nagyobb kép elforgatásával, tehát a feladat
>> nagyon hosszú és nagyon híg.
>> A tennivaló tehát nem sok, ugyanakkor gyakran külső feltételekre kell
>> várakozni. Ha ezt így kezelem le:
>> while feltetel do;
>> akkor teljesen feleslegesen agyonterhelem a gépet, fölösleges
>> másodpercenként húszmilliószor megnézni. Terhelés szempontjából jó
>> megoldás
>> while feltétel do sleep(200);
>> Így csak ötször nézi meg, ez a feladattól függően elég is lehet, közben
>> meg csinálhat mást. Ezzel csak egy baj van, a feladat folytatódik, lesz
>> még benne száz ilyen és az eseménykezelő amivel elindítottam (pl:gombra
>> kattintás) soha nem ér véget és ezért ha közben valami juzer kívánság
>> mégis adódna, nem tudom kiszolgálni. Felhasználói oldalról úgy néz ki,
>> mintha kifagyott volna a program, nem reagál egérre, gombra.
>>
>> Ezért programjaimat timer által generált eseményekkel vezérlem. Ezt már
>> évek óta csinálom, működik is csak nagyon kényelmetlen ha a feladat
>> bonyolódik. Úgy képzeljétek el, hogy a feladat meg van írva, tele
>> ciklusokkal elágazásokkal és ahol a fenti példa szerint várakozási van a
>> sleep helyett a program kilép a timer eseményből de gondoskodni kell
>> róla, hogy az újabb timer eseményre a kihagyott sleep után folytassa.
>> Közben, a ki és belépés között a közben fellépő események
>> kiszolgálhatók. Globális változókon keresztül módosíthatják a timer
>> alatt futó főtevékenység menetét is.
>> No ezért most a timer rutin kb. így néz ki:
>>
>>
>> var fazis:integer;
>>
>> procedure TForm1.Timer1Timer(Sender: TObject);
>>
>> begin
>>       amitmindigkell_eleje;{ebben nincs hosszú várakozás feltételekre}
>>       case fazis of
>>       1:begin valamitcsinal1; if feltetel1 then inc(fazis) end;
>>
>>       2:begin valamitcsinal2; if feltetel2 then fazis:=4 else inc(fazis)
>> end;
>>
>>       3:begin valamitcsinal3; if feltetel3 then fazis:=9 end;
>>
>>       4:begin valamitcsinal4; inc(fazis) end;
>>
>>       5:begin valamitcsinal5; if feltetel5 then inc(fazis) end;
>> ..............
>>
>>       end{case fazis};
>>       amitmindigkell_vege;{ebben nincs hosszú várakozás feltételekre}
>> end{Timer};
>>
>> Ez a példa egyszerűnek tűnik, de a valóságban gyakran többszintű.
>> A valamitcsinalx-ekben esetleg hasonló programrészek lehetnek, tehát nem
>> várakozunk, hanem kilépünk.
>> Egymásba ágyazott ciklusokat kell félbehagyni és kilépni, ehhez további
>> globális változókban tárolt adatok kellenek és hirtelen követhetetlenné
>> válik a dolog.
>>
>> Ti hogyan csináljátok?
>> Lehet, hogy meg kellene tanulnom thread-eket Ha ez a megoldás és valaki
>>     megdobna egy működő példával megköszönném és persze bármi más jó
>> tanácsot.
>>
>> Üdv.
>>                         Németh Tibor
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> -----------------------------------------
>>             elektro[-flame|-etc]
>>
>>
>
> -----------------------------------------
>            elektro[-flame|-etc]
>
>
>
> -----
> A(z)  üzenetben nem található vírus.
> Ellenőrizte: AVG - www.avg.com
> Verzió: 10.0.1390 / Vírus adatbázis: 1516/3773 - Kiadás dátuma: 2011.07.18.
> A belső Vírusadatbázis elavult.
>
> -----------------------------------------
>            elektro[-flame|-etc]
>
>



More information about the Elektro mailing list