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 

Dieses Thema hat akzeptierte Lösungen:

Producer/Consumer endet zu früh



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!

11.10.2011, 09:10
Beitrag #1

glglgl Offline
LVF-Neueinsteiger


Beiträge: 2
Registriert seit: Oct 2011

8.6
2010
DE



Producer/Consumer endet zu früh
Hallo,

ich versuche grade, mittels des Producer-Consumer-Konzeptes ein Programm zusammenzustellen.

Leider funktionieren die Queues nicht ganz wie erwartet: producerseitig würde ich gerne dem Consumer eine Art EOF kommunizieren, aber so, daß dieser alle Daten bekommt.

Wenn aber, wie in den Beispielen, direkt nach Beendigung des Producers die Queue geschlossen wird und die noch in der Queue verbliebenen Elemente dem Producer beim Schließen zurückgegeben werden, ist das nicht ganz mein Ziel, weil der Consumer davon ja nichts mitbekommt.

Aus diesem Grund habe ich zwischen Ende der Producer-Schleife und Schließen der Queue eine Warteschleife eingefügt, die wartet, bis der Consumer die Queue abgearbeitet hat und dann erst die Queue schließt. Nun kommt mir das aber nicht ganz sauber vor - oder liege ich da falsch?

Ein Bild sagt mehr als 1000 Worte, daher habe ich mein Test-VI mal angehängt.

Der Producer schiebt im 50-ms-Abstand 40 Werte in die Queue, der Consumer holt sie im 150-ms-Abstand ab und zeigt sie nacheinander an. Ohne genannte Schleife kommen die verbliebenen Werte beim Schließen heraus (klar), mit der Warteschleife läuft es wie gewünscht.

Nun meine Frage: Gibt es eine bessere Möglichkeit? Wie würdet ihr da herangehen?
8.6 .vi  Queue-EOF.vi (Größe: 12,98 KB / Downloads: 193)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
11.10.2011, 09:29
Beitrag #2

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: Producer/Consumer endet zu früh

Akzeptierte Lösung

Bei diesem sehr einfachen Bsp würde ich in der Warteschleife nachschauen, ob noch Elemente in der Queue sind. Wenn leer, dann offenbar Consumer fertig, und die Queue darf zerstört werden.

Aufwändiger: Die Queue enthält neben Daten noch Befehle, das Übergabeelement ist dann ein Cluster. Dann kann der Consumer sauber abgebrochen werden, und erst wenn beide Schleifen fertig sind, wird die Queue zerstört.

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
11.10.2011, 13:51
Beitrag #3

glglgl Offline
LVF-Neueinsteiger


Beiträge: 2
Registriert seit: Oct 2011

8.6
2010
DE



RE: Producer/Consumer endet zu früh
(11.10.2011 09:29 )jg schrieb:  Bei diesem sehr einfachen Bsp würde ich in der Warteschleife nachschauen, ob noch Elemente in der Queue sind. Wenn leer, dann offenbar Consumer fertig, und die Queue darf zerstört werden.

Aufwändiger: Die Queue enthält neben Daten noch Befehle, das Übergabeelement ist dann ein Cluster. Dann kann der Consumer sauber abgebrochen werden, und erst wenn beide Schleifen fertig sind, wird die Queue zerstört.

Gruß, Jens

Perfekt, danke schön, genauso hab ichs jetzt gemacht (1. Lösung).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Client Server Anwendung mit Producer-Consumer Template echtzeit 4 5.931 13.01.2010 16:23
Letzter Beitrag: eg

Gehe zu: