LabVIEWForum.de - Erzeuger-Verbraucher Muster Abbruch Verbraucherschleife mit Abarbeitung der Queue

LabVIEWForum.de

Normale Version: Erzeuger-Verbraucher Muster Abbruch Verbraucherschleife mit Abarbeitung der Queue
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo,

Häufig wird die Verbraucher-Schleife wie in diesem Erzeuger-Verbraucher Beispiel beendet. Sprich nachdem die Erzeuger Schleife beendet wurde, wird die Queue freigegeben. Beim nächsten Aufruf von "Element entfernen" wird ein Fehler ausgegeben und die Verbraucher Schleife beendet. Soweit so gut, allerdings möchte ich sicherstellen das die Verbraucher-Schleife erst dann beendet wird nachdem alle Elemente aus der Queue "abgearbeitet" sind.

Mein Ansatz ist in der angehängten VI zu sehen. Hat jemand eine bessere Idee dies zu realisieren oder passt das so?

Zusatzfrage: Was soll eigentlich das Schieberegister bei der Queue-Referenz im verlinkten Bild? Bei dem Fehlercluster macht das ja Sinn aber bei einer Referenz?Hmm
Hallo lumaxo,

Lösungsvorschläge:
- Mit NamedQueues arbeiten und für Producer und Consumer je eine eigene Referenz erfragen. Dann im Erzeuger die Ref freigeben, ohne die Queue gleich komplett zu löschen. Im Verbraucher dann mit einem Timeout arbeiten und testen, ob die Queue für eine bestimmte Zeit ohne Daten bleibt…
- Im Erzeuger nicht nur Daten, sondern auch Befehle in diese Queue schreiben, z.B. mit einem Cluster [Befehl, Daten]. Als letztes wird der Befehl "Quit" in die Queue geschrieben und der Verbraucher weiß dann, dass er sich beenden darf…
(11.02.2015 15:03 )lumaxo schrieb: [ -> ]Zusatzfrage: Was soll eigentlich das Schieberegister bei der Queue-Referenz im verlinkten Bild? Bei dem Fehlercluster macht das ja Sinn aber bei einer Referenz?Hmm
Eine Schieberegister bei einer Refnum (egal welcher) stellt sicher, dass die Refnum auch bei null Durchläufen einer Schleife am Ausgang gültig ist. Bei einer LabVIEW-While-Schleife gibt es natürlich niemals null Durchläufen, aber einer FOR-Schleife durchaus.

[attachment=52111]

Gruß, Jens
Das ist natürlich eine eher abnorme Anwendung, denn normalerweise sollte man dafür sorgen, dass die Verbraucherschleife schneller ist als die Erzeugerchleife.
Da die Queue immer länger wird und Du sie nicht begrenzt hast, dürfte das VI nach einigen Tagen abstürzen, wenn sämtliche Resourcen des PC verbraucht sind.
Zur Antwort von Jens, in Klartext übersetzt: Das Shift-Register ist in der oben einfach unnötig, weil es sich um eine while-Schleife handelt. Unten ist es doppelt unnötig, da es sich im eine while-Schleife handelt und der Ausgang außerdem gar nicht benutzt wird.
Ich würde einfach einen Timeout als Abbruchbedingung vorgeben der normalerweise nicht vorkommt.
[attachment=52114]
(11.02.2015 16:25 )Lucki schrieb: [ -> ]Das ist natürlich eine eher abnorme Anwendung, denn normalerweise sollte man dafür sorgen, dass die Verbraucherschleife schneller ist als die Erzeugerchleife.

Das stimmt nicht ganz. Es gibt oft die Situation, dass der Erzeuger Daten als Burst mit hoher Priorität erzeugt und der Verbraucher diese mit niedriger Priorität abarbeitet, z.B. bei uns an der GSI: Während der Ionenstrahl ans Experiment geliefert wird werden Daten mit hoher Priorität erfasst und in die Queue geschrieben. Die Strahl Pause ist oft deutlich länger, sodass der Verbraucher auch bei niedriger Priorität genügend Zeit bekommt, um seine Aufgabe zu erledigen, z.B. Daten Speichern oder für die Online-Visualisierung analysiert. Insgesamt muss der Durchsatz natürlich gewährleistet sein. Aber im Falle eine Abbruchbedingung sollen dennoch alle Element in der Queue abgearbeitet, insbesondere gespeichert werden.

Gruß Holger
@Hoger
Hast Recht, aber ich hatte hier von "nomalerweise" gesprochen, und was "normal" ist, darüber streitet sich die Menschheit von jeher. (Manche halten heutzutage 20 verschiedene Geschlechter für normal, andere nur 2.) Also einigen wir uns darauf, dass deine burstweise Erzeugung noch "normal" ist und formulieren es so: Die Mittlere Verbraucherrate sollte höher er sein als die mittlere Erzeugerrate.
Gruß Ludwig
Referenz-URLs