2016-11-29 8 views
4

MATLABがいつ終了するかを知る方法はありますか?いくつかのリソースを解放し、いくつかのログを出力するなど、いくつかの作業をしたいと思っていました...クラスのデストラクタでコードを追加できました。しかし、MATLABがデストラクタを呼び出す順序を決定することはできないので、どちらが最後のものなのかわかりませんので、リソースを解放することができます。MATLABに終了イベントがありますか?

このようなイベントが存在する場合は、MATLAB exitイベントへのコールバックを登録できますか?

+0

MATLABの関数、またはMATLAB自体の関数を終了することについて話していますか? – gnovice

+0

あなたは 'groot'で' ObjectBeingDestroyed'イベントをキャプチャできるかもしれませんが、想像していることを制御するのは難しいでしょう... – matlabgui

+0

MATLAB自体から@gnovice既存 –

答えて

8

関数またはMATLAB自体を終了するときにスローされるexitイベントはありません。しかし、あなたが最終的なクリーンアップを処理するために行うことができる2つのものがあります:

  1. 使用onCleanUp objects:関数から出たときに、ローカルワークスペース内の変数が破壊されている(とMATLAB自体から出はbase workspace内のオブジェクトを破壊します) 。リソース(ファイルなど)を操作するときは、例外安全な方法でこれらのリソースを処理するオブジェクトonCleanUpを作成することをお勧めします。これはthe documentationで詳しく説明されており、この質問は:How do you handle resources in MATLAB in an exception safe manner? (like “try … finally”)

  2. finish.mファイルを作成します。MATLABを終了すると、それはfinish.mをという名前のファイルをsearch pathに見て、終了する前に、そのコードを実行します。

+0

...偉大な心:p –

+0

@ RodyOldenhuis:こんにちは、それを見てみましょう。 ;) – gnovice

+0

ああ、あなたはそれに値する。 –

6

finish.mファイルに任意のクリーンアップアクションを配置できます。

startup.mと同様に、MATLABはプログラムの終了直前にこのファイルを(MATLABの検索パスにある場合)実行します。

また、調べる価値はonCleanupです。この単純なクラスは、オブジェクトを作成するときに登録された関数を破棄して実行するオブジェクトを作成します。

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); 

意味を、ファイルハンドルfidはまだ正常なfclose(fid)に達していなかったにもかかわらず、閉じている:例えばファイルを扱うとき、これは非常に有用です。これは、オブジェクトOCがエラー後にMATLABによって暗黙的にクリアされたためです。

関連する問題