|
Autor
|
Thema: Tabellenabfrage in Waituntil-Bedingung (1828 mal gelesen)
|
VS-Simulator Mitglied Doktorand

 Beiträge: 75 Registriert: 20.02.2008 Plant Simulation 8.2
|
erstellt am: 27. Apr. 2009 11:09 <-- editieren / zitieren --> Unities abgeben:         
Hallo, hat jemand von Euch eine Idee, wie man innerhalb einer Waituntil-Bedingung den Wert einer Tabelle abfragen kann? Ich habe das Problem, dass in eine Tabellenzelle ein Wert geschrieben werden soll, sobald eine andere Zelle den Wert 0 erreicht. Waituntil lässt jedoch leider die Abfrage von Tabellen nicht zu und den abzufragenden Zellwert in eine Varaible zu übergeben ist nicht so einfach, da dieser Vorgang in über 130 Fällen parallel passiert und man so noch enorm viele Variablen erstellen müsste. Hoffe jemand von Euch hat eine Idee!! Danke und beste Grüße Christian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Homer Simpson Mitglied
 
 Beiträge: 345 Registriert: 14.09.2005
|
erstellt am: 27. Apr. 2009 12:05 <-- editieren / zitieren --> Unities abgeben:          Nur für VS-Simulator
Es geht mittels eines Tricks: Code: while Tabelle[1,1] /= 0 loop Tabelle.Geaendert := false; stopuntil Tabelle.Geaendert prio 1; end;
[Diese Nachricht wurde von Homer Simpson am 27. Apr. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
VS-Simulator Mitglied Doktorand

 Beiträge: 75 Registriert: 20.02.2008 Plant Simulation 8.2
|
erstellt am: 27. Apr. 2009 14:41 <-- editieren / zitieren --> Unities abgeben:         
Danke! Kann es hier aber nicht Probleme geben, wenn diese Abfrage mit sehr vielen unterschiedlichen Tabellenzeilen gleichzeitig abläuft, dass sich dann die Abfrage stopuntil Tabelle.Geaendert... der unterschiedlichen Tabellenzellen gegnseitig beeinflusst? Wenn zum Beispiel folgendes passiert: while Tabelle[3,1] /= 0 loop Tabelle.Geaendert := false; stopuntil Tabelle.Geaendert prio 1; end; Gleichzeitig würde aber auch while Tabelle[3,2] /= 0 loop Tabelle.Geaendert := false; stopuntil Tabelle.Geaendert prio 1; end; ablaufen und hier würde sich die Tabelle ändern. Würde dann nicht die erste Bedingung ebenfalls mit berücksichtigt werden? Gruß Christian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Homer Simpson Mitglied
 
 Beiträge: 345 Registriert: 14.09.2005
|
erstellt am: 27. Apr. 2009 16:24 <-- editieren / zitieren --> Unities abgeben:          Nur für VS-Simulator
Nein, es funktioniert auch in diesem Fall. Die umgebende while-Schleife wird nur verlassen, wenn die Bedingung tatsächlich erfüllt ist. Wenn sich eine andere Zelle ändert, so wird die Methode zwar kurz aufgeweckt, aber da die Schleife nicht verlassen wird, wird die Methode sofort wieder suspendiert. Es ist aber wichtig, dass man stopuntil und nicht waituntil verwendet. Wenn zwei Methoden gleichzeitig warten, und sich dann die Tabelle ändert, so wird zuerst eine der Methoden aufgeweckt werden (abhängig von prio). Ist die Bedingung nicht erfüllt, wird die Schleife nicht verlassen und die Zuweisung (Tabelle.Geaendert := false) erneut ausgeführt. Würde nun die zweite Methode mittels waituntil warten, würde sie jetzt nicht mehr aufgeweckt werden. Bei stopuntil ist aber garantiert, dass die Methode auf jeden Fall aufgeweckt wird, selbst wenn die Bedingung zu diesem Zeitpunkt schon nicht mehr erfüllt ist. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |

| | Teamleiter (w/m/d) Entwicklung im Center SAP Plattform & Prozessintegration | Lust auf spannende SAP-Landschaften und moderne IT? Wir sind der größte kommunale IT-Dienstleister in NRW und betreuen SAP-Systeme für zahlreiche Kunden innerhalb und außerhalb des Landes. Mit unserer Center-Struktur bündeln wir Fachwissen und schaffen Raum für Spezialisierung und Innovation. Im Center SAP Plattform & Prozessintegration suchen wir ab sofort einen Teamleiter (m/w/d) Entwicklung, ... | | Anzeige ansehen | Feste Anstellung |
|
VS-Simulator Mitglied Doktorand

 Beiträge: 75 Registriert: 20.02.2008 Plant Simulation 8.2
|
erstellt am: 05. Mai. 2009 12:12 <-- editieren / zitieren --> Unities abgeben:         
|