' schrieb:Beim Erzeugen der Instanz wird eine Referenz einer 2 Instanz (komplett andere Klasse) in die Queue geschrieben.
In die Queue wird die zu verwendende Instanz (blau) geschrieben. Die Referenz der Queue ist ein Datenteil einer zweiten Klasse (grün). Ob diese zweite Klasse notwendig ist, müsste man ausprobieren.
Ganz links (Create.vi) wird eine Instanz erzeugt: Blaue Linie. Die Instanz-Referenz wird in eine Queue geschrieben: Grüne Linie. In Set und Get wird nichts weiter gemacht, als die Referenz aus der Queue heraus gelesen und "benutzt". Hier endet das erste Beispiel (paradigm 1). Vorteil dieses Verfahrens ist es, dass von der blauen Klasse im "Arbeits-VI" nichts "zu sehen" ist. So, dass man nichts sieht, finde ich das gut. Hier ist die Klassen-Referenz pro VI-Aufruf gekapselt.
Der ganze rechte Teil macht nichts anderes, als zuerst die Referenz (aus der Queue) auszulesen, dann per dieser Referenz Daten zu bearbeiten. Zuletzt muss die Referenz natürlich wieder in die Queue. Dieses Verfahren finde ich nicht so schön. Hier ist die Klassen-Referenz in Teilen des VIs nicht mehr gekapselt. Daher darf zu diesen Zeiten der Datenfluß nicht unterbrochen werden.
Zitat:Wenn ich nun parallele Schleifen nutze, dann funktioniert das Ganze nicht unbedingt, da es sein kann, dass eine Schleife fortlaufend die Queue beschreibt und daraus liest und andere Schleifen nicht zum Zuge kommen oder?
Ja, hier sehe ich auch ein Problem. Das lässt sich aber minimieren, indem der eine Prozess nur in einem bestimmten Raster arbeitet. Zudem sollte die Queue so kurz wie möglich leer sein. [*nachdenk*] Hier sehe ich aber auch ein Problem.
Zitat:Kann man das nicht direkt mit einer einzigen Klasse machen und dort die Referenzen nutzen?
Ausprobieren.
Ich sag mal ganz unprofessionell: Referenz in Globale Variable legen. Dann ist die Referenz überall erhältlich - mit allen Risiken, die ja durch die Queue eliminiert werden.
Ich verwende meine MöchteGernKlassen wie folgt: Es gibt eine Queue, in die Steuerdaten geschrieben werden. Wenn also jemand die Daten der Klasse ändern will, schreibt er einen Datensatz in die Queue. Das "Klassen-Main-VI" pollt neben der eigentlichen Arbeit diese Queue. Steht da was drinnen, wird das entsprechende ausgeführt. Dieser Datensatz in der Queue entspricht einem Property. Zum Auslesen der Public-Daten gibt es einen Melder, der die Public-Daten enthält. Es ist mit allen Konsequenzen zu beachten, dass das Verwenden einen Queue zu einem asynchronen Ablauf führt! Man kann Propertys auch ohne Queue realisieren - das hat aber wegen der sehr beschränkten Anzahl von Eingängen eines VIs enge Grenzen.
Dieses Verfahren kann man natürlich auch mit einer Klassen-Instanz machen. Die Instanz-Referenz wäre dann im "Klassen-Main-VI" gekapselt und von außen nicht zugänglich - aber dafür gibt es sie nur ein einziges Mal.
[*grübel*]
Wenn du eine Referenz verwendest (siehe dein Beispielbild), werden vermutlich Probleme auftreten. Diese Referenz gilt als "global". Irgendwann musst du die Referenz dereferenzieren. D.h. aber: zwei Datenflüsse für eine Instanz! Das führt, wenn auch praktisch nur sehr schwer nachweisbar, zu RaceConditions.