有没有办法知道MATLAB什么时候退出?我想做一些工作,例如,发布一些资源,打印一些日志......我可以在某些类的析构函数中添加一些代码.但由于我们无法确定MATLAB调用析构函数的顺序,我不确定哪一个是最后一个,所以我可以释放资源.
如果存在这样的事件,我们可以将任何回调注册到MATLAB退出事件吗?
从函数或MATLAB本身退出时,我不知道退出事件.但是,您可以做两件事来处理最终清理:
使用onCleanUp对象:退出函数时,本地工作空间中的变量将被销毁(从MATLAB本身退出将破坏基础工作空间中的对象).使用资源(文件等)时,最好的做法是创建一个onCleanUp以异常安全的方式处理这些资源的对象.这在文档和这个问题中有更详细的讨论:如何以异常安全的方式处理MATLAB中的资源?(比如"试试......终于")
您可以在finish.m文件中放置任何清理操作.
与startup.m类似,MATLAB在程序终止之前执行此文件(在MATLAB搜索路径上找到).
另外值得研究的是关于清洁.这个简单的类创建了一个对象,当它被销毁时,它运行在对象创建期间注册的函数.这在处理文件时非常有用,例如:
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);
Run Code Online (Sandbox Code Playgroud)
意思是,文件句柄fid仍然关闭,即使fclose(fid)没有达到法线.这是因为OC错误后MATLAB隐式清除了对象.