' schrieb:die Quit LabVIEW Primitive ist (bei mir) die letzte Funktion überhaupt, die im Haupt-VI aufgerufen wird. vorher wurde schon alles "sauber" deinitialisiert, etc - da läuft definitiv nix mehr in der ganzen VI Hierarchie, wenn diese Funktion dran kommt - und dient eigentlich nur dazu der LV Runtime Engine den Befehl zu geben "so, jung, wir sind feddich hier, kannst abbaun!";)
ansonsten stimme ich dir zu: ein laufendes Programm mit "aktiven Schleifen", etc einfach so mit "quit LabVIEW" oder der "Stop"-Primitive zu beenden ist schon sehr sehr unsauber und brachial ...
Wenn Du Dein Programm so strukturiert hast brauchst Du das Quit gar nicht mehr. Sobald Du das letzte verbliebene Frontpanel innerhalb einer Exe schliesst beendet sich das Exe automatisch. Das ist schon so gewesen seit es LabVIEW Exes gibt und war für gewisse Leute ein Grund zum meckern da sie dadurch keine unsichtbaren LabVIEW Deamons programmieren zu können glaubten. (Glaubten deshalb weil es doch geht. Man muss nur erst eine VI Referenz zu dem VI selber öffnen und solange die innerhalb einer Running VI-Hierarchy aktiv bleibt bleibt das entsprechende VI auch im Speicher).
Der einzige Grund warum ein LabVIEW Exe sich nicht ordentlich verabschiedet obwohl alle aktiven VI Referenzen geschlossen wurden und das letzte Frontpanel ebenfalls, ist wenn das LabVIEW Programm noch irgendwo in einem Treiber stecken bleibt. Das braucht nicht mal in einem Aufruf zur Treiber-DLL selber zu sein sondern kann auch in der Cleanuproutine dieses Treibers sein. Aber:
1) ist das dann irgendwie ein Bug im entsprechenden Treiber und
2) hilft LabVIEW Quit hier auch nicht
Mit dem Quit deckst Du im Prinzip nur eventuel nicht ordentlich abgeschlossene Tasks (Deamons, Loops, etc) und im Falle von buggy DLL Treibern die sich beim Unloaden verheddern wenn noch Resourcen durch die Applikation geöffnet sind, kannst Du sogar einen Zombieprozess erzeugen:
Das LabVIEW Programm wurde gewaltsam beendet bevor der Task der die Resource verwaltet die Möglichkeit hatte um diese ordentlich abzuschliessen und ist nun selber weg aber der Prozess wird durch den fehlerhaften Treiber daran gehindert wirklich aus dem Speicher entfernt zu werden.
Die Folge ist dass Du den Zombie nur noch durch den Task Manager beenden kannst und wenn sich der Treiber in den Tiefen des Windows Kernels selber verirrt hat eventuel gar nicht mehr. Und wer hier nun sagt dass das in Windows 32bit nicht geht dem kann ich nur sagen dass ich das selber so gesehen habe. Die einzige Lösung um dann wieder zu einem funktionierenden System zu kommen ist der Powerknopf.
Ich programmiere nun schon über 16 Jahre in LabVIEW, beinahe 12 davon professionel als Alliance Member und ich habe die Quit-Funktion noch in keiner Applikation eingebaut. Ist einfach nicht nötig da ich ganz einfach dafür sorge dass sich alle Loops ordentlich beenden und als Letztes macht das HauptVI das Licht aus indem es ganz einfach ein FP.Close macht. Wenn dann noch etwas läuft habe ich was falsch gemacht, das durch die Quit-Funktion höchstens kaschiert würde.
Rolf Kalbermatter