[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