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 

Frage zu CIN (Bezüglich Semaphoren-Implementierung)



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!

30.04.2010, 12:48 (Dieser Beitrag wurde zuletzt bearbeitet: 30.04.2010 20:39 von jg.)
Beitrag #1

Hypnos Offline
LVF-Neueinsteiger


Beiträge: 2
Registriert seit: Apr 2010

7.1
2004
de


Schweiz
Frage zu CIN (Bezüglich Semaphoren-Implementierung)
Hallo zusammen

In LabVIEW sind ja beispielsweise die Semaphore über eine CIN implementiert. Ich habe festgestellt, dass offenbar alle, während der Ausführung erzeugten Semphoren-Objekte, freigegeben werden, wenn das VI beendet wurde. Folglich muss der Code in der CIN irgendwie detektieren, dass das VI gestoppt wurde. Ich weiss, wie man detektieren kann, dass ein VI abgebrochen wurde (CINAbort() wird aufgerufen). Mir ist jedoch keine funktion bekannt, die aufgerufen würde wenn ein VI sich ohne Abbruch des Anwenders beendet. Hat jemand eine Ahnung, wie das bei der Semaphore implementiert wurde? Ich möchte diese Verhalten gerne in einer eigenen CIN nachbilden.

Lv71_img


Angehängte Datei(en)
Sonstige .vi  refnum.vi (Größe: 22,45 KB / Downloads: 192)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
30.04.2010, 15:51 (Dieser Beitrag wurde zuletzt bearbeitet: 30.04.2010 15:53 von rolfk.)
Beitrag #2

rolfk Offline
LVF-Guru
*****


Beiträge: 2.305
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
Frage zu CIN (Bezüglich Semaphoren-Implementierung)
Also erstens: Warum willst Du noch CINs verwenden? Das ist eine Legacy-Technologie und wird in zukünftigen neuen LabVIEW Platformen wohl nicht mehr unterstützt. Eventuel haben schon die aktuelen 64 Bit Platformen keinen Support für CINs mehr,

Zweitens das was Du siehst hat LabVIEW grundsätzlich für alles was eine Refnum hat. Ausser bei VISA in den Options ist das auch nicht auschaltbar.

Die Funktionalität die LabVIEW dafür intern verwendet ist zwar exportiert aber vollkommen undokumentiert. Gebrauch davon ist absolut auf eigenes Risiko und kann in jeder neuen LabVIEW Version plötzlich nicht mehr funktionieren.

Die Funktion die Du dazu in Deinem C Code aufrufen musst heisst:

typedef int32 (*CleanupProcPtr)(UPtr data);
TH_REENTRANT int32 RTSetCleanupProc(CleanupProcPtr proc, UPtr data, int32 mode);

proc ist eine Funktion die Du implementierst und die das Objekt sauber dealloziert, data ist Dein Objekt, mode ist 0 um die proc für das Objekt zu deinstallieren, etwa wenn Du das Objekt ordnungsgemäss schliesst, und grösser als 0 um sie zu installieren. Dabei bedeutet 1 dass Deine proc für das Dataobjekt aufgerufen wird wenn LabVIEW abgeschlossen wird und 2 bedeutet dass sie aufgerufen wird wenn das aktuelle Top-Level VI idle wird (was die default Operation für alle LabVIEW refnums ist).

Wie Du das für Deinen Code anwendest magst Du selber aussuchen und rumprobieren. Die Informationen hast Du, aber mache Dich darauf gefasst dass Du noch was debuggen musst.

Rolf Kalbermatter
Technische Universität Delft, Dienst Elektronik und Mechanik
https://blog.kalbermatter.nl
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30.04.2010, 18:22
Beitrag #3

Hypnos Offline
LVF-Neueinsteiger


Beiträge: 2
Registriert seit: Apr 2010

7.1
2004
de


Schweiz
Frage zu CIN (Bezüglich Semaphoren-Implementierung)
Danke für die Antwort.
Bei CINs hast du eben diese 'Callback' funktionen wie CINAbort(), CINInit(), etc., die du bei DLLs unter LabVIEW 7.1 nicht hast. Das wäre der Grund, der bei mir für eine CIN spricht.
Ich bin überhaubt nicht scharf darauf, 'geheime' Features, die nicht offiziell freigelegt sind, zu benutzen. Der automatische Cleanup wenn ein VI Idle wird wäre schön, aber im Grunde reicht es ja auch, wenn die nicht zerstörten Objekte nach dem Schliessen von LabVIEW freigegeben werden, was ja problemlos zu implementieren ist.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Gehe zu: