' schrieb:- es wird nicht gewartet bis das reentrante VI ausgeführt wird
- es wird ein neuer Speicherbereich bei jedem Aufruf reserviert und nach der Ausführung wieder frei gegeben. Speicherbereich für Daten(Variablen) und Code. Sprich es wird eine komplett neue Kopie des reentranten VIs erstellt(ähnlich wie .vit)
Wo muss ich Reentrance optimal einsetzen?
Kann man eine Task reentrant definieren? (vielleicht in ein extraVI packen und reentrant definieren)
Hat jemant gute Tutorials oder Literatur dazu?
Hallo Eugen, ich hab extra bis zu deinem Geburtstag mit der Antwort gewartet

(Glückwunsch und so ...)
Literatur: (leider in Englisch)
mltithrd.zip (Größe: 74,43 KB / Downloads: 1717)
Rentrant bedeutet:
normalerweise kann in LabVIEW immer nur EINE Instanz eines VIs zu einer Zeit laufen. d.h. wenn man z.B. ein VI zwei mal in eine While-Schleife packt und so verdrahtet, dass sie parallel ausgeführt werden könnten, werden sie aber trozdem nacheinander ausgeführt. LabVIEW entscheidet selbständig, welche Instanz zuerst aufgerufen wird ...
Bei reentranten VIs kann man diese Beschränkung (die eigentlich ein sehr hilfreiches Feature ist) aufheben, dann braucht man aber u.A. mehr Speicher, weil jede Instanz seinen eigenen Datenbereich bekommt.
Wo man es optimal einsetzt kann ich nicht wirklich erklären, ich benutze reentrante VIs, wenn die Problemstellung es verlangt, dass ich ein VI gleichzeitig parallel laufen lassen muss (?). z.B. hab ich mal einen TCP/IP Server gebastelt, der mehrere Verbindungen gleichzeitig bedienen kann. Pro Client, der sich verbindet wird über VI Server ein neues, reentrantes VI gestartet, dass die Kommunikation mit diesem einen, ihm zugewiesenen Client bearbeitet.
Rekursive VI Aufrufe mittels VI Server sind auch ein gutes Beispiel für die Notwendigkeit von reentranten VIs, wurde auch schon genannt.
Der Aufruf des VIs wird, wenn es reentrant ist, eher verlangsamt, weil der Memory Manager immer einen neuen Datenbereich reservieren muss. Der Vergleich mit dem Template hinkt, weil nur der Code und die Daten neu erstellt werden, das VI an sich wird beim Aufruf nicht dupliziert.
An die Task-Verwaltung kommst du nur über den Menüpunkt "Ausführung" ran. Es wird nicht automatisch für jedes reentrante VI ein neuer Thread erstellt, man kann das aber durchaus als Analogie gelten lassen: ein reentrantes VI, in dem z.B. eine While-Schleife läuft, die irgendwelche Inputs / Outputs behandelt kann man als *Thread* betrachten.
Grüße
CB