Queue-Elemente von mehreren Consumern auswerten lassen
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!
Queue-Elemente von mehreren Consumern auswerten lassen
Moin zusammen,
ich habe eine Producer/Consumer-Struktur mit Queues aufgebaut. In einem VI werden Messwerte an die Queue angefügt. Andere VIs sollen diese Werte verwenden. Beispielsweise soll ein VI die Daten auf Sicherheitsprobleme überprüfen, ein weiteres soll die Daten anzeigen und ein drittes VI soll die Daten speichern.
Wie kann ich sicherstellen, dass aller drei Consumer die Daten erhalten? Ich kann die Daten mittels ELEMENT AUS QUEUE ENTFERNEN abrufen. Damit würde aber nur ein Consumer die Daten erhalten. Eine alternative ist die Funktion QUEUE-STATUS LESEN. Dabei würden die Daten in der Queue erhalten bleiben. Aber an welcher Stelle würde ich dann ein Element entfernen?
Oder ist diese Struktur einfach nciht für mehrere Consumer gedacht?
Über Anregungen und fröhliche Beschimpfungen freue ich mich wie immer! *zwinker*
LG
Torsten
"Über Fragen, die ich nicht beantworten kann, zerbreche ich mir nicht den Kopf!" (Konrad Zuse)
Queue-Elemente von mehreren Consumern auswerten lassen
Es gibt da rein logisch schwer zu lösende Probleme, wenn die Consumer nicht synchron arbeiten und sich tatsächlich - was ja der Sinn der Queue ist- mehrere oder viele Elemente in der Queue befinden. Aus diesem Grunde ist die Verteilung derselben Daten auf mehrere Consumer nur bei Meldern implementiert. Dort gibt es spezielle Funktionen.
Queue-Elemente von mehreren Consumern auswerten lassen
Bei Meldern ist es doch so, dass man die Meldung nicht explizit entfernen muss, oder? Die letzte Meldung wird also erst dann überschrieben, wenn eine neue Meldung gesendet wird. Dann müsste ich also sicherstellen, dass alle Consumer abgearbeitet wurden, bevor eine neue Meldung verschickt wird, was irgendwie ein ähnliches synchronisationsproblem darstellt. Ich werde mir die Melder-Funktionen mal genauer ansehen.
Danke für den Tipp.
"Über Fragen, die ich nicht beantworten kann, zerbreche ich mir nicht den Kopf!" (Konrad Zuse)
Queue-Elemente von mehreren Consumern auswerten lassen
Schau dir die Funktion "Auf Meldung mit Melderhistorie warten" an. Setz den Eingang "Vorherige ignorieren" auf True und die Funktion wartet den angebenen Timeout, bis alle Funktionen "Auf Meldung warten" die Meldung abgeholt haben.
Queue-Elemente von mehreren Consumern auswerten lassen
Ich hab zu deinem Problem auch noch einen Vorschlag.
In dem VI sind drei Schleifen die über die Queue verbunden sind. Bei mir sind alle Schleifen gleichberechtigt.
Vielleicht hilft dir das weiter.
Queue-Elemente von mehreren Consumern auswerten lassen
Dein VI zeigt ja genau die Problematik. Du hast in zwei Schleifen die Funktion "aus queue entfernen". wenn also nun schleife 1 als erstes bearbeitet wird, dann erhält schleife 2 das element gar nicht mehr. weil es in schleife eins gelöscht wurde. und schleife drei erhält es ebenfalls nciht.
"Über Fragen, die ich nicht beantworten kann, zerbreche ich mir nicht den Kopf!" (Konrad Zuse)
Queue-Elemente von mehreren Consumern auswerten lassen
Ich hab es anders aufgebaut. In meiner Queue gibt es immer nur maximal ein Element. Der Inhalt dieses Elements wird in den Schleifen verändert und das Element dann wieder in die Queue zurück gelegt. Die anderen Schleifen bekommen dadurch immer aktuelle Daten. Es geht nichts verloren.
22.04.2009, 22:31 (Dieser Beitrag wurde zuletzt bearbeitet: 22.04.2009 22:33 von Y-P.)
-------------------------------------------------------------------------- Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------