19.01.2010, 11:17
Beitrag #1
|
|
|
19.01.2010, 11:24
Beitrag #2
|
|
|
19.01.2010, 11:25
Beitrag #3
|
IchSelbst
LVF-Guru
Beiträge: 3.692
Registriert seit: Feb 2005
11, 14, 15, 17, 18
-
DE
97437
Deutschland
|
User Event nur einmal ausführbar
' schrieb:ich führe zum Zeitpunkt x ein User Event aus. Jedoch kann ich es nur einmal ausführen, ein zweites mal nicht mehr. Wo ist hier der Haken?
Eine Event-Struktur und eine While-Schleife laufen parallel in einer äußeren While-Schleife.
Für alle Elemente innerhalb einer While-Schleife gilt: Wenn alle Elemente abgearbeitet worden sind, wird der nächste Schleifendurchlauf gemacht. Demzufolge müssen die Elemente, die bereits abgearbeitet worden sind, mit der nächsten Abarbeitung solange warten, bis alle anderen Elemente innerhalb dieser While-Schleife auch abgearbeitet sind.
Wenn die Event-Struktur also einmal abgearbeitet wurde, so muss sie solange warten, bis auch die parallele While-Schleife abgearbeitet worden ist. Erst dann kann die Event-Struktur erneut starten. Da die papallele While-Schleife aber nie endet, wird die Event-Struktur kein zweites Mal gestartet.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
|
|
|
19.01.2010, 11:32
Beitrag #4
|
|
|
19.01.2010, 11:40
Beitrag #5
|
IchSelbst
LVF-Guru
Beiträge: 3.692
Registriert seit: Feb 2005
11, 14, 15, 17, 18
-
DE
97437
Deutschland
|
User Event nur einmal ausführbar
' schrieb:Wieso endet die nie? Das seh' ich nicht.
Die Abbruchbedingung der (beiden) While-Schleife (roter Punkt unten rechts, Punkt ist rot => Abbruch bei True) ist mit False verdrahtet.
Und gleich noch zwei Hinweise:
Die Vorgehensweise bezüglich des Erstellens des Benutzerevents sollte auf jeden Fall so wie von dimitri84 vorgeschlagen gemacht werden. Möglicherweise gibt es sonst nämlich irgendwann Speicherüberlauf.
Außerdem kann die Verwendung der Variablen "Boolean" so wie gepostet zu RaceConditions führen !
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
|
|
|
19.01.2010, 11:45
Beitrag #6
|
|
|
19.01.2010, 11:56
Beitrag #7
|
|
|
19.01.2010, 12:10
Beitrag #8
|
IchSelbst
LVF-Guru
Beiträge: 3.692
Registriert seit: Feb 2005
11, 14, 15, 17, 18
-
DE
97437
Deutschland
|
User Event nur einmal ausführbar
' schrieb:Wenn ich eine Schleife um die Event Struktur lege dann läuft es.
Und zwar deswegen: jede While-Schleife läuft für sich => Die Event-Struktur läuft ständig.
Zitat:Kann ich es so belassen ich meine wegen Speicherüberlauf.
Die drei Elemente in der äußeren While-Schleife (generieren Benutzerevent, die zwei kleinen While-Schleifen) werden, so ist der Algorithmus, genau einmal ausgeführt. Die kleinen While-Schleifen laufen zwar ewig, das spielt aber für die Betrachtung der großen While-Schleife keine Rolle. Das Generieren des Benutzerevents wird nur ein einziges Mal gemacht => Du kannst das so lassen.
Wenn man sich das jetzt so überlegt, kommt man zu dem Ergebnis, dass man die außere While-Schleife einfach weg lassen kann.
Zitat:schliesst wir alles mit exit beendet.
Das ist schlecht, funktioniert aber.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
|
|
|
19.01.2010, 12:15
Beitrag #9
|
BsaiboT
LVF-Stammgast
Beiträge: 449
Registriert seit: Nov 2009
2010
2007
kA
22459
Deutschland
|
User Event nur einmal ausführbar
Du solltest die große Whileschleife entfernen und nur die zwei kleinen, einzelnen stehen lassen. Dann wird nicht mehr ständig ein neues Event erzeugt und registriert, sondern nur einmal zu Programmstart. Allerdings solltest du dann bei der Erzeugerschleife (dort, wo du das Event setzt) mit Schieberegistern gearbeitet werden.
Generell solltest Du Dir vielleicht mal das Prinzip von Erzeuger und Verbraucher noch einmal anschauen (auch die Beispiele dazu in LV!), dann wird dir sicherlich einiges klar...
Edit: da war wieder einer schneller Also lass wie wir alle sagen die Whileschleife aussen weg.
Tobias Brüggemann
Dipl.-Ing.(FH) Nachrichtentechnik/Elektronik
|
|
|
| |