MATLABがいつ終了するかを知る方法はありますか?いくつかのリソースを解放し、いくつかのログを出力するなど、いくつかの作業をしたいと思っていました...クラスのデストラクタでコードを追加できました。しかし、MATLABがデストラクタを呼び出す順序を決定することはできないので、どちらが最後のものなのかわかりませんので、リソースを解放することができます。MATLABに終了イベントがありますか?
このようなイベントが存在する場合は、MATLAB exitイベントへのコールバックを登録できますか?
MATLABがいつ終了するかを知る方法はありますか?いくつかのリソースを解放し、いくつかのログを出力するなど、いくつかの作業をしたいと思っていました...クラスのデストラクタでコードを追加できました。しかし、MATLABがデストラクタを呼び出す順序を決定することはできないので、どちらが最後のものなのかわかりませんので、リソースを解放することができます。MATLABに終了イベントがありますか?
このようなイベントが存在する場合は、MATLAB exitイベントへのコールバックを登録できますか?
関数またはMATLAB自体を終了するときにスローされるexitイベントはありません。しかし、あなたが最終的なクリーンアップを処理するために行うことができる2つのものがあります:
使用onCleanUp objects:関数から出たときに、ローカルワークスペース内の変数が破壊されている(とMATLAB自体から出はbase workspace内のオブジェクトを破壊します) 。リソース(ファイルなど)を操作するときは、例外安全な方法でこれらのリソースを処理するオブジェクトonCleanUp
を作成することをお勧めします。これはthe documentationで詳しく説明されており、この質問は:How do you handle resources in MATLAB in an exception safe manner? (like “try … finally”)
はfinish.m
ファイルを作成します。MATLABを終了すると、それはfinish.m
をという名前のファイルをsearch pathに見て、終了する前に、そのコードを実行します。
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によって暗黙的にクリアされたためです。
MATLABの関数、またはMATLAB自体の関数を終了することについて話していますか? – gnovice
あなたは 'groot'で' ObjectBeingDestroyed'イベントをキャプチャできるかもしれませんが、想像していることを制御するのは難しいでしょう... – matlabgui
MATLAB自体から@gnovice既存 –