INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

doppelte while-Schleife geschickt beenden



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

08.04.2013, 19:24
Beitrag #1

Hasenfuss Offline
LVF-Stammgast
***


Beiträge: 331
Registriert seit: Dec 2012

2012
2012
DE



doppelte while-Schleife geschickt beenden
Wie kann ich eine while-Schleife geschickt beenden?

Ich habe zwei while-Schleifen. Die äussere Schleife wird durch den Melder "Beenden" gesteuert. Innerhalb dieser Schleife befindet sich ein weiterer Prozess, der gestartet oder beendet werden kann ("Melder 1").

Melder 1 kann die innere Schleife beenden, wird aber auch verwendet, um die while-Schleife wieder zu starten (z. Könnten in diesem Prozess Daten abgespeichert werden). Um Pollen zu vermeiden, habe ich die Funktion "Auf Meldung warten..." genommen und "vorige ignorieren = true" gesetzt, damit die Schleife nicht pollt. Beim Beenden des Programms werden die Melder "Beenden = True" gesetzt, um die äussere Schleife zu beenden und der Melder1 = false, um Aufzeichnung zu beenden. Nun bleibt die Schleife aber hängen, da die Funktion "Auf Meldung warten..." noch aktiv ist.

Ich könnte jetzt in der Prozedur "Programm beenden" zweimal den Melder auf false setzen, einmal zum Beenden der inneren Schleife, falls die noch aktiv ist, und dann ein zweites Mal, dass die Funktion "auf Melder warten..." nochmal ausgelöst wird mit dem Wert false, damit beide Schleifen dann geschlossen werden. Der false-case zum Abfragen, ob Melder1=true/false ist leer.

Wäre meine Lösung mit doppeltem Setzen von Melder1=false eine brauchbare Lösung oder gibt es vielleicht bessere Möglichkeiten?


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
08.04.2013, 19:59
Beitrag #2

Hasenfuss Offline
LVF-Stammgast
***


Beiträge: 331
Registriert seit: Dec 2012

2012
2012
DE



RE: doppelte while-Schleife geschickt beenden
Folgende Variante funktioniert auch nicht:

In der Beendenprozedur wird nach dem Setzen von Melder1 = true Melder1 freigegeben.

Eigentlich müsste die Funktion etwas weiter oben mit "warte auf Meldung..." abbrechen, da der Melder freigegeben wurde - tut die Funktion aber nicht, sie wartet fleissig immer weiter ...


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
08.04.2013, 20:24
Beitrag #3

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: doppelte while-Schleife geschickt beenden
Du hast 2 "unabhängige" Referenzen auf denselben Melder erzeugt.

Grundregel: Pro Obtain braucht es üblicherweise ein Close/Destroy.
Ausnahme: Du erzwingst durch ein TRUE die Zerstörung aller Referenzen.

Gruß, Jens

Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)

!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
08.04.2013, 21:12
Beitrag #4

Hasenfuss Offline
LVF-Stammgast
***


Beiträge: 331
Registriert seit: Dec 2012

2012
2012
DE



RE: doppelte while-Schleife geschickt beenden
Hallo Jens,

vielen Dank fuer Deine Antwort.

Ich verstehe Deine Antwort grad noch nicht. Bedeutet die Funktion "Melder freigeben" nicht "close/destroy"?

Ich wollte die Melder so nicht dierekt miteinander verbinden. Je komplexer ein Programm wird und je mehr Melder und Queues man hat - das wird im laufe der Zeit immer unübersichtlicher.

Ich war bisher der Meinung halt - gebe ich den Melder an einer Stelle frei - z.B. auch zwischen zwei VIs - dann bricht die Funktion in dem anderen VI auch ab. Bei Queues funktioniert es zumindest so, also dachte ich - bei Meldern geht es auch.

Wäre dieser Ansatz so mit einer Konstanten und Variablen eine "bessere" Lösung?


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
08.04.2013, 21:22
Beitrag #5

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: doppelte while-Schleife geschickt beenden
Read the Manual!. Ohne ein True an "Force Destroy" wird nur die aktuelle Notifier bzw. Queue Refnum geschlossen.

Und wenn du eine Notifier oder QueueRefnum mal innerhalb einer gesamten Applikation verteilen willst, dann ist eher eine FGV das Mittel der Wahl.
Wenn du Race-Conditions auschließen kannst, dann ist eine lokale Variable IMHO durchaus eine legitime Möglichkeit, auch wenn es dem offiziellen LabVIEW Style Guide widerspricht.

Gruß, Jens

Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)

!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
08.04.2013, 21:40 (Dieser Beitrag wurde zuletzt bearbeitet: 08.04.2013 21:41 von Hasenfuss.)
Beitrag #6

Hasenfuss Offline
LVF-Stammgast
***


Beiträge: 331
Registriert seit: Dec 2012

2012
2012
DE



RE: doppelte while-Schleife geschickt beenden
Herzlichen Dank für Deine Geduld. Ich habe zuerst nicht kapiert, was Du mit True an "force destroy" meintest. Ein Problem sind manchmal auch die unterschiedlichen Bezeichnungen auf deutsch/englisch. Vielleicht ist es sinnvoller, die deutsche Version runterzuschmeissen und mt der englischen Variante weiterzuarbeiten, um sich daran zu gewöhnen. Aber echt nochmal ein riesengroßes Dankeschön.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  While-Schleife sofort beenden ? RobertRoth 17 10.982 21.10.2019 11:00
Letzter Beitrag: RobertRoth
  Schleife sofort beenden mprocket 9 7.540 19.01.2018 23:26
Letzter Beitrag: mprocket
  While Schleife durchläuft ein zweites mal nach beenden p4tti 5 5.358 15.09.2016 10:34
Letzter Beitrag: jg
  Schleife nach Pop-Up beenden TDO 6 6.403 16.02.2016 09:59
Letzter Beitrag: TDO
  While Schleife mit Mausklick beenden eincremerle 3 4.025 10.11.2015 07:53
Letzter Beitrag: eincremerle
  Doppelte Berechnung & Sequenzen Schtief 4 3.946 08.09.2015 10:15
Letzter Beitrag: GerdW

Gehe zu: