MATLAB有退出事件吗?

时间:2016-11-29 19:35:07

标签: matlab

有没有办法知道MATLAB什么时候退出?我想做一些工作,例如,发布一些资源,打印一些日志......我可以在某些类的析构函数中添加一些代码。但由于我们无法确定MATLAB调用析构函数的顺序,我不确定哪一个是最后一个,所以我可以释放资源。

如果存在这样的事件,我们可以将任何回调注册到MATLAB退出事件......?

2 个答案:

答案 0 :(得分:8)

当从函数或MATLAB本身退出时,我不知道退出事件。但是,您可以做两件事来处理最终清理:

  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时,它会在search path上查找名为finish.m的文件,并在终止前运行该代码。

    < / LI>

答案 1 :(得分: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)。这是因为错误后MATLAB隐式清除了对象OC