2016-11-29 1 views
4

Gibt es eine Möglichkeit zu wissen, wann ein MATLAB beendet wird? Ich wollte etwas arbeiten, zum Beispiel eine Ressource freigeben, ein paar Protokolle drucken ... Ich könnte bei den Destruktoren einiger Klassen Code hinzufügen. Aber da wir die Reihenfolge, in der MATLAB Destruktoren aufruft, nicht bestimmen können, bin ich mir nicht sicher, welche die letzte ist, damit ich die Ressource freigeben kann.Hat MATLAB ein Exit-Ereignis?

Können wir einen Rückruf zum MATLAB Exit-Ereignis registrieren, wenn ein solches Ereignis existiert ...?

+0

Sprechen Sie über das Beenden einer Funktion in MATLAB oder von MATLAB selbst? – gnovice

+0

Sie * können * in der Lage sein, das 'ObjectBeingDestroyed'-Ereignis auf' groot' zu erfassen, aber es wird schwierig zu kontrollieren, was los ist, würde ich mir vorstellen ... – matlabgui

+0

@gnovice aus MATLAB selbst –

Antwort

8

Es gibt kein Exit-Ereignis, von dem ich weiß, dass es beim Verlassen einer Funktion oder MATLAB selbst ausgelöst wird. es ist jedoch zwei Dinge, die Sie endgültige Bereinigung zu handhaben können:

  1. Verwendung onCleanUp objects: Wenn aus einer Funktion Verlassen Variablen im lokalen Arbeitsbereich zerstört werden (und von MATLAB Verlassen selbst wird die Objekte in den base workspace zerstören) . Wenn Sie mit Ressourcen (Dateien usw.) arbeiten, empfiehlt es sich, ein onCleanUp-Objekt zu erstellen, das diese Ressourcen in einer ausnahmesicheren Weise behandelt. Dies wird ausführlicher in the documentation diskutiert und diese Frage: How do you handle resources in MATLAB in an exception safe manner? (like “try … finally”)

  2. erstellen finish.m-Datei: Wenn MATLAB verlassen, es finish.m Namen auf der search path für eine Datei aussehen wird und dass Code ausgeführt werden, bevor sie beendet.

+0

... große Geister: p –

+0

@RodyOldenhuis: Häh, würdest du dir das ansehen? ;) – gnovice

+0

ah, du verdienst es. Sie haben sich die Mühe gemacht, bessere Links zu finden :) –

6

Sie können alle Bereinigungsaktionen in die Datei finish.m einfügen.

Ähnlich wie startup.m führt MATLAB diese Datei (wenn sie im MATLAB-Suchpfad gefunden wird) unmittelbar vor dem Programmende aus.

Auch in Betracht zu ziehen ist onCleanup. Diese einfache Klasse erstellt ein Objekt, das bei der Zerstörung die während der Objekterstellung registrierte Funktion ausführt. Dies ist äußerst nützlich, wenn sie mit Dateien zum Beispiel Umgang:

fid = fopen(filename, 'r'); 
OC = onCleanup(@() any(fopen('all')==fid) && fclose(fid)); 

% ...file reading and processing here 
% ERROR HAPPENS HERE! 
% ... more processing here 

fclose(fid); 

Bedeutung, die Datei-Handle fid ist noch geschlossen, obwohl der normale fclose(fid) wurde nicht erreicht. Dies liegt daran, dass das Objekt OC nach dem Fehler implizit von MATLAB gelöscht wurde.

Verwandte Themen