Hallo zusammen,
Wenn ich ein Event habe und den Timeout auf 0 setze, heißt das doch nur, dass er den Timeout sofort abarbeitet INSOFERN KEIN ANDERES EVENT VORLIEGT?
Oder sehe ich das falsch?
Vielen Dank für Eure Mühe
Liebe Grüße
Ja, siehst du falsch, zumindest teilweise.
Hilfe lesen:
[
attachment=33350]
Das Terminal Timeout an der Event-Struktur bezieht sich nur auf den Timeout-Case der Event-Struktur.
Alle anderen Events werden "instantan" ausgeführt (natürlich in der Reihenfolge, in der sie ausgelöst wurden).
Gruß, Jens
Zuerst mal danke für Deine schnelle Antwort!
Also heißt das, wenn ich an den Timeout ne 0 ranhäng, dann funktioniert das nicht einwandfrei?
In meinem Programm habe ich das so gemacht, weil ich von einem externen Schalter in einem übergeordnetem Programm den Stop Button benutzen will.
Abbrechen tut das ordnungsgemäß, wie ich es möchte, ich frage mich nur, ob das jetzt so wie ich es geschrieben habe fehleranfällig ist.
So wie ich es jetzt geschrieben habe, führt das Programm den State fertig aus, und geht dann in den Endzustand.
LG
Das Programm kann schon funktionieren, nur ist in dem gezeigten Teil des Programms nicht nur Timeout=0, sondern es ist auch sonst nirgendwo ein Wait zu sehen. Es ist also anzunehmen, daß die übergeordnete Schleife mit maximaler Geschwindigkeit umläuft und 100% CPU-Last verursacht.
Um die Wirkunsweise der Event-Struktur zu verstehen, hier mal 2 Beispiele zum Vergleich:
In beiden Fällen While Schleife mit Evenstruktur.
Fall 1: Timeout=0, in der Schleife ist ein Wait mit 5000ms
Fall 2: Timeout = 5000ms, kein Wait in der Schliefe.
Ohne Ereignis, das ist klar, erhöht sich der Index i der Schleife alle 5000ms.
Was passiert bei einem Ereignis?
Fall 1: Die Ereignsistruktur wird nur alle 5000ms einnmal abgefragt. Steht nach dieser Wartezeit ein Ereignis an, dann wird es bearbeitet, ansonsten wird die Ereignsistruktur gleich wieder verlassen. Es dauert also 1..4999 ms, ehe das Ereignis bearbeitet wird.
Fall 2: Die Ereignsistruktur ist immer in Wartestellung, ein Ereignis wird sofort beearbeitet. Das hat im Falle eines Ereignisses eine sofortige Indexerhöhung zur Folgge. Also z.B.: 2 sec nach dem letzten Timeout kommt Ereignis --> sofortige Abarbeitung --> dann wieder Warten bis zum vollen Timeout.