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 

Wie auf eine Instanz aus parallelen Prozessen zugreifen?



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!

10.04.2010, 10:03 (Dieser Beitrag wurde zuletzt bearbeitet: 10.04.2010 12:00 von IchSelbst.)
Beitrag #1

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.700
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Wie auf eine Instanz aus parallelen Prozessen zugreifen?
Abrissbirne hat hier eine spezifische Frage zum Vorgehen bei Erstellen einer Klasse gestellt. eg hat ein Posting gemacht, auf das ich mit einem neuen Thema antworten will - weil ich eine Frage aufwerfen möchte, die nichts mit der von abrissbirne zu tun hat:

' schrieb:Man handelt mit OOP-Objekten im Programm genauso wie mit realen Objekten im Leben.
Diese Aussage ist allgemein betrachtet natürlich richtig.

Eine LabVIEW-spezifische Eigenschaft jedoch behindert die "lebensnahe Umsetzung der Beziehungen" zwischen unterscheidlichen Instanzen erheblich: der Datenfluß.

In Realität sind Instanzen nicht sequenziert (naja, vielleicht manche). In LV soll die Instanz-Variable als Datenfluß geführt werden. Das führt aber ganz schnell zu großen Problemen bei der Verwendung von Instanzen. z.B. dann, wenn ich in parallel laufenden Prozessen auf diese eine Instanz zugreifen will. Man kann diese Probleme natürlich mit Tricks umgehen (z.B. FGVs) - was dann aber die Übersichtlichkeit und das Debuggen erschwert.

In einer textorientierten Sprache kann die Instanz-Variable global vorliegen. Jeder(, der die Erlaubnis bekommen hat) hat Zugriff auf die Instanz und kennt deren Typ (verwendbar sind natürlich nur die öffentlichen bzw. veröffentlichten Elemente). Das entspricht in LV also einer "Globalen Variablen" (in LV nicht zu verwenden), der Zugriff gilt als "by reference".

Hier die Vorgeschichte zu meiner Frage:
Ich will auch mal eine Klasse machen und zwar von einem Modul, was bereits existiert und hervorragend funktioniert. Es handelt sich um das Modul "Bitte Warten", von dem ich die verschiedenen LV-Versionen mal als ZIP-Files angehängt habe. Eine (1) Klasseninstanz soll in beliebigen parallelen Prozessen aufrufbar sein. Später soll es möglich sein, mehrere dieser Instanzen parallel und aus parellelen Prozessen heraus aufzurufen.

Jetzt die Frage:
Wie mach ich das mit LVOOP, eine einzige Klassen-Variable ohne deren Datenfluß zu verwenden? Und ohne sie als global zu definieren.

Hinweis zur den Lizenzbedingungen für "BitteWarten":
Einzige Bedingung: Sollten die LV-Tassen wider Erwarten doch nicht ankommen, bitte dem Admin auf die Füße treten!


Angehängte Datei(en)
Sonstige .zip  BitteWarten800.zip (Größe: 142,94 KB / Downloads: 482)

Sonstige .zip  BitteWarten820.zip (Größe: 142,26 KB / Downloads: 475)

Sonstige .zip  BitteWarten850.zip (Größe: 114,43 KB / Downloads: 496)

Sonstige .zip  BitteWarten861.zip (Größe: 100,89 KB / Downloads: 488)

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
12.04.2010, 08:02
Beitrag #2

abrissbirne Offline
LVF-Stammgast
***


Beiträge: 480
Registriert seit: Aug 2007

LV2009, LV2010
2007
EN

66123
Deutschland
Wie auf eine Instanz aus parallelen Prozessen zugreifen?
' schrieb:Jetzt die Frage:
Wie mach ich das mit LVOOP, eine einzige Klassen-Variable ohne deren Datenfluß zu verwenden? Und ohne sie als global zu definieren.
Ich würde sagen gar nicht. Wenn dir der "Trick" (ich finde es ist kein Trick) mit der FGV um das Klasseelement abzulegen nicht gefällt solltest du vermutlich GOOP verwenden.

Gruß,
abrissbirne
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
12.04.2010, 11:38
Beitrag #3

eg Offline
LVF-SeniorMod


Beiträge: 3.868
Registriert seit: Nov 2005

2016
2003
kA

66111
Deutschland
Wie auf eine Instanz aus parallelen Prozessen zugreifen?
Ehrlich gesagt habe ich das Problem nicht verstanden Blink

Du willst aus deinem BitteWarten eine Klasse machen und diese von mehreren parallelen Tasks aufrufen können. Soll die FGV global fürs ganze Programm laufen oder soll die Funktion der FGV überall verfügbar sein, aber pro Aufruf eine eigene Instanz benutzt werden? Mit dem 1 ist ja kein Problem, das 2 kann man (wenn ich mich nicht irre) mit Reentrance lösen.
Oder ich habe etwas falsch verstanden. Übrigens verwende ich keine FGV, vielleicht verstehe ich deshalb nicht das Problem.

Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
12.04.2010, 14:30
Beitrag #4

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.700
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Wie auf eine Instanz aus parallelen Prozessen zugreifen?
' schrieb:Du willst aus deinem BitteWarten eine Klasse machen und diese von mehreren parallelen Tasks aufrufen können.
Genau, das will ich.

Zitat:Soll die FGV global fürs ganze Programm laufen oder soll die Funktion der FGV überall verfügbar sein, aber pro Aufruf eine eigene Instanz benutzt werden?
Ersteres.
Ersteres bedeutet, eine Wanduhr zu haben in allen Prozessen. Weiterhin soll die Möglichkeit bestehen, mehrere Wanduhren in allen Prozessen zu haben.

Zitat:Mit dem 1 ist ja kein Problem
FGV hat einen Nachteil: Um eine Methode der Klasse auszuführen, braucht man immer drei SubVIs: FGV lesen, Methode ausführen, FGV schreiben. Problem: da ist ein Stück Datenfluß zwischen FGV lesen und schreiben, was zu RaceConditions führen kann. => Während diese drei SubVIs ausgeführt werden, muss der Zugriff auf die Klassenvariable blockiert werden => Wieder zwei Teile mehr am BD.

[*nachdenk*]

Eigentlich soll eine FGV ja lediglich Daten (Schieberegister auf While-Schleife) speichern. Das FGV so aufzubohren, dass auch Methoden möglich sind (Case-Struktur mit Enumeratoreingang), macht aus einer FGV ja schon eine Klasse.

Soll ich jetzt also das bestehende BitteWarten-Main hernehmen, einen Klassencluster reinsetzen, alle Schieberegister-Variablen in den Cluster - und fertig? - Nach außen hin wäre das dann identisch mit dem bisherigen.

Jetzt muss ich nur noch überlegen, ob dieses dann prinzipiell meinen Vorstellungen entspricht.

[/*nachdenk*]

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
12.04.2010, 22:33
Beitrag #5

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.700
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Wie auf eine Instanz aus parallelen Prozessen zugreifen?
So, jetzt hab ich das Teil in LVOOP - und wo hab ich jetzt einen Vorteil?

Lv85_img


Angehängte Datei(en)
Sonstige .zip  BitteWartenLVOOP850.zip (Größe: 159,56 KB / Downloads: 482)

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
13.04.2010, 08:27 (Dieser Beitrag wurde zuletzt bearbeitet: 13.04.2010 11:32 von abrissbirne.)
Beitrag #6

abrissbirne Offline
LVF-Stammgast
***


Beiträge: 480
Registriert seit: Aug 2007

LV2009, LV2010
2007
EN

66123
Deutschland
Wie auf eine Instanz aus parallelen Prozessen zugreifen?
' schrieb:So, jetzt hab ich das Teil in LVOOP - und wo hab ich jetzt einen Vorteil?

Lv85_img
Verstehe deine Frage jetzt wirklich nicht, da du die Vorteile von OOP ja scjon selbst aufgeführt hast. Du findest es halt unnötig und das ist dein gutes Recht. OOP ist eben ein Programmierkonzept, nicht mehr und nicht weniger. Du musst es ja nicht verweden.


' schrieb:Jetzt die Frage:
Wie mach ich das mit LVOOP, eine einzige Klassen-Variable ohne deren Datenfluß zu verwenden? Und ohne sie als global zu definieren.
Ich habe da mal was gebastelt.Lv86_img

Edit: Nochmal in 8.5Wink
Lv85_img


Angehängte Datei(en)
Sonstige .zip  Object_Reference.zip (Größe: 33,56 KB / Downloads: 481)

Sonstige .zip  Object_Reference.zip (Größe: 31,37 KB / Downloads: 438)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
13.04.2010, 21:07
Beitrag #7

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.700
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Wie auf eine Instanz aus parallelen Prozessen zugreifen?
' schrieb:Ich habe da mal was gebastelt.
Wenn schon mit Referenzen, dann alles andere weglassen. Ich lass mir das mit den Referenzen nochmals durch den Kopf gehen.

Derweil kann ja mal einer abrissbirnes Muster unter LV-2009 mit Sonde an der markierten Stelle laufen lassen. Läuft da auch der Speicher mit ca. 10MB pro Sekunde voll. Mit 85 geht alles richtig.

Lv85_img


Angehängte Datei(en)
Sonstige .zip  ByReference.zip (Größe: 37,07 KB / Downloads: 464)

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
14.04.2010, 07:23
Beitrag #8

abrissbirne Offline
LVF-Stammgast
***


Beiträge: 480
Registriert seit: Aug 2007

LV2009, LV2010
2007
EN

66123
Deutschland
Wie auf eine Instanz aus parallelen Prozessen zugreifen?
' schrieb:Wenn schon mit Referenzen, dann alles andere weglassen. Ich lass mir das mit den Referenzen nochmals durch den Kopf gehen.
Das kannst du knicken. Wenn du die Referenz anstatt des Klasseneingangs nimmst, kannst du keine Dynamic Dispatch VIs bauen. Du kannst die Referen auch nachträglich nicht als Dynamic Dispatch deklarieren. Auf die schnelle konnte ich mir eben nur so helfen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
14.04.2010, 09:17
Beitrag #9

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.700
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Wie auf eine Instanz aus parallelen Prozessen zugreifen?
' schrieb:Wenn du die Referenz anstatt des Klasseneingangs nimmst, kannst du keine Dynamic Dispatch VIs bauen.
Bei derartigen VIs soll mir das Recht sein, das mit dem KlassenCluster-Eingang.

Bei privaten Methoden, die eigentlich nur vorhanden sind, weil man halt gelegentlich was in SubVIs auslagern soll/will/muss, lasse ich den Klassencluster getrost weg. Guckst du mein Muster: privates SubVI ohne KlassenCluster.

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
15.04.2010, 15:48
Beitrag #10

abrissbirne Offline
LVF-Stammgast
***


Beiträge: 480
Registriert seit: Aug 2007

LV2009, LV2010
2007
EN

66123
Deutschland
Wie auf eine Instanz aus parallelen Prozessen zugreifen?
' schrieb:Bei derartigen VIs soll mir das Recht sein, das mit dem KlassenCluster-Eingang.

Bei privaten Methoden, die eigentlich nur vorhanden sind, weil man halt gelegentlich was in SubVIs auslagern soll/will/muss, lasse ich den Klassencluster getrost weg. Guckst du mein Muster: privates SubVI ohne KlassenCluster.
Hab geguckt:cool:Dann würde es natürlich für deine Anwendung reichen.

' schrieb:Wenn schon mit Referenzen, dann alles andere weglassen. Ich lass mir das mit den Referenzen nochmals durch den Kopf gehen.

Derweil kann ja mal einer abrissbirnes Muster unter LV-2009 mit Sonde an der markierten Stelle laufen lassen. Läuft da auch der Speicher mit ca. 10MB pro Sekunde voll. Mit 85 geht alles richtig.

Lv85_img
Hat das schon jemand gemacht? Würd mich auch interessieren.

Gruß, abrissbirne
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
  Auf Daten richtig zugreifen, Zugriff auf Childclass-Daten ohne Override VI TpunktN 8 6.131 28.06.2023 16:25
Letzter Beitrag: BNT

Gehe zu: