LabVIEWForum.de - Queue von hinten auslesen?

LabVIEWForum.de

Normale Version: Queue von hinten auslesen?
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen Smile

ich haette mal eine Frage..

Was ich da zusammengebastelt habe funktioniert zwar, aber irgendwie bin ich sicher dass es auch eleganter geht, ausserdem hab ich keine Ahnung was passiert wenn die Laenge meiner queue ins unendliche steigt.. Blush

Folgendes: Ich habe zwei While Loops die parallel laufen. Im einen Werden Daten erzeugt, die dann ueber eine Queue in den anderen uebertragen werden in dem sie dann verarbeitet werden.

Ziel der Sache: Der verarbeitende Loop sollte sich immer den aktuellen Wert holen und dann mit dem arbeiten.

Die Problematik: Die Daten werden viel schneller (wie schnell weiss ich leider nicht genau) erzeugt als dass sie gelesen werden.
Will heissen: Wenn sich der Eingangswert aendert darf ich erst einen Haufen alter Werte abarbeiten bevor ich die Aenderung auch im auslesenden Loop mitbekomme.

Jetzt hab ich mir ueberlegt, ich schreibe den Wert einfach immer ans andere Ende. Das funktioniert auch soweit, dadurch lese ich immer aktuelle Werte, habe halt nur eine Queue die staendig waechst und mir vermutlich irgendwann um die Ohren fliegt..

Jetzt meine Frage: faellt irgendwem spontan eine elegantere Loesung ein? Oder weiss irgendjemand was passiert wenn die Queue zu gross wird?


[attachment=42005]


Vielen Dank im Voraus,
Chess
Wieso verwendest du eine Queue, wenn du sowieso immer nur den aktuellen/letzten Wert an anderer Stelle verarbeiten willst?

Das hört sich nach einer Aufgabe für einen Notifier an.

Oder wenn es unbedingt eine Queue sein soll, dann begrenze sie auf Länge 1 und arbeite mit "Lossy Enqueue Element".

Gruß, Jens
(25.10.2012 22:21 )Chess schrieb: [ -> ]Oder weiss irgendjemand was passiert wenn die Queue zu gross wird?

Warum probierst du das nicht einfach aus? Man kann sich da ja recht schnell ein Demo zusammen klicken?

Abgesehen davon: Wenn du immer nur den letzten Wert willst, könntest du doch auch einfach ne lokale Variable nehmen...

A.
(26.10.2012 10:35 )Achim schrieb: [ -> ]Warum probierst du das nicht einfach aus? Man kann sich da ja recht schnell ein Demo zusammen klicken?
Der Vorteil der Queues/Notifieres ist aber die Synchronisation von Senden und Empfangen. Beim Auslesen einer lokalen Variablen wird nicht gwartet, bis ein neuer Wert anliegt, man weiß nicht, ab sie neu ist oder ob man den gleichen Wert schon x-mal gelesen hat. Man müßte dann noch eine boolsche Veriable für das Handshaking erstellen, das wird aber dann umständlicher und ist immer noch nicht so gut wie eine Queue oder Notifier.
Übrigens: Die zweitgenannte Lösung von Jens verdient meines Erachtesn die verbale Diskriminierung mit "Wenn es unbedingt eine Queues sein muss.." nicht. Ich würde Melder nur dort verwenden, wo sich Queues grundsätzlich nicht eignen und wofür sie (denke ich) gedacht sind: bei mehreren Empfängern.

Edit: Wenn die die Erzeugung immer schneller ist als dier Verbrauch, und immer nur der neueste Wert interessiert, Synchronisation also keine Rolle speilt, dann ist eine lokale Variable tatsächlich die einfachste Lösung.
Hallo an alle und danke fuer die Antworten,

ich habe stehe noch relativ am Anfang meiner Labview - Karriere, und habe einfach online gesucht was man verwenden kann um zwischen zwei parallel laufenden while Loops zu kommunizieren.

Ich bin auf Queues gestossen, und deshalb habe ich versucht das Ganze ueber eine Queue zu machen Smile

Vielen Dank fuer den Tip mit dem "Lossy Enqueue Element" zu loesen, das war ziemlich genau das was mir gefehlt hatte Smile

Gruss an alle und Danke fuer die schnelle Hilfe,

Yourock

Chess
Referenz-URLs