[elektro] windows gond
Orbán Árpád
orbana at orbel.hu
Fri Nov 27 00:31:27 CET 2015
Szia!
Szerintem lehet eseménykezelőket egymásba ágyazni (de nem vagyok benne
biztos), mert mindegyik a főszálban fut. A TTimer az már felvet kérdéseket.
Nálad a hibát talán az is okozhatja, hogy olyankor is belefut valamelyik
eseménykezelőbe, amikor csak pl. a form ki- vagy bekerül a
fókuszból/fókuszba?
Válaszd szét a vezérlő control-okat (eseménykezelőjüket) a hardvert
vezérlő kódtól.
Használj egy állapotgépet a hardver vezérlésére, és a kontrol ezt az
állapotgépet piszkálja szabályzott keretek között. Pl. ha automata módon
megy a folyamat, akkor az x-edik állapotba kerüléssel indul egy Timer,
ami ha lejár, egy változót átállít az eseménykezelőjében. Az állapotgép
a timer futása alatt végig x-edik állapotban marad, és ha ez a változó
átállítás megtörtént (lejárt a timer), akkor kerül át egy y-odik
állapotba, mellesleg kapcsolgatja a hardvert.
Olyan állapotgépet írj, amelyik minden körülmények között visszatér a
hívójához miután egy részfeladatot elvégzett (egy részfeladatban soha
nem lehet várakozás), így beteheted egy sűrűn futó (pl. 50 ms) TTimer
eseménybe a hívását. Nekem így hibamentesen fut egy soros porton
kommunikáló program, mely a kommunikációt ilyen TTimer eseményben futó
állapotgépben végzi, a főprogram csak annyit lát, hogy van vett csomag,
vagy indít egy csomag küldést, a többit az állapotgép végzi.
A Control-okon keresztüli vezérlésre visszatérve, a Te példádnál
maradva, az A RadioGroup csak akkor állítsa az állapotgépet, ha nincs
letiltva. Ha le van tiltva, akkor az állapotgép eseményei állítják az A
RadioGroup-ot. Így lehet egy kölcsönösen kizáró feltételrendszert
csinálni, nem fog összeakadni.
Félek, hogy ennél többet csak a konkrét feladat/kód ismeretében lehet
mondani...
Üdv:
Árpi
2015.11.22. 22:15 keltezéssel, Nemeth Tibor írta:
> Hali!
>
> Már megint az a gondom, hogy nem értek a windowshoz.
>
> Egyszerű kütyü, delphiben,az A jelű RadioGroup elemeit kattintgatva
> juzer kézi vezérelhet.
> Vannak automatikus feladatok is, ekkor a B jelű RadioGroup egy elemét
> juzer kiválasztja, ekkor A jelű tiltásra kerül és egy timer a B jelű
> állapotától függően állítgatja A jelű itemindexét, annak
> eseménykezelőjén keresztül vezérelve a kütyüt, mint kézi üzemben.
>
> A lényeg, hogy a RadiGroup OnClick eseménykezelője akkor is lefut, ha
> nem egerészünk, hanem itemindexet állítunk.
>
> Szinte tökéletesen működik, de bár ritkán, de mégiscsak megengedhetetlen
> gyakorisággal, előfordul, hogy bárhol a program ablakban kattintva (nem
> A-n és nem B-n) lefut A vagy B eseménykezelője, kattannak a relék,
> elindulnak motorok, hw nélkül lehet észre sem venném. Valóban az
> eseménykezelők futnak le mert ha töréspontot állítok rájuk, azon
> elakadnak. Ha nem kattintgatok, tökéletesen fut.
>
> Ha eddig zavaros is, de most a kérdés:helyes-e ha
> Timer eseménykezelője állítva A vagy B itemindexét, elindítja annak
> eseménykezelőjét és az esetleg B vagy A (a másik) eseménykezelőjét?
> Szabad-e eseménykezelőket egymásba ágyazni?
> Mivel alapvetően jól működik, úgy sejtem, szabad, csak vannak kritikus
> pillanatok, amikor ez szerencsétlenséget okoz. Ha ez a sejtés igaz, mi
> az amit meg kell várni egy itemindex átállítása, vagyis az eseménykezelő
> behívása előtt? Idő van, tudok várni, ha tudom mire. Olyasmi lehet ez
> mint amikor külön szálból synchronize-n keresztül érhető csak el a fő
> szál objektuma.
>
>
> Előre is köszönettel:
> Németh Tibor
>
>
>
>
>
>
> -----------------------------------------
> elektro[-flame|-etc]
>
More information about the Elektro
mailing list