Safely interrupt a script/function

35 次查看(过去 30 天)
I have a script which loops through an array and performs an action for each itetation which takes several seconds. Also, at the beginning of the script, a driver is loaded which has to be properly unloaded in order to not crash the hardware. Problem is that if you accidentally create a large array, you are stuck with two options: Either you Ctrl+C and go do the old unplug-replug, or you wait for 40h. Both are not feasable. Is there a way, then, to call a function upon the user terminating the program?

采纳的回答

Daniel
Daniel 2021-6-15
As Walter suggested, onCleanup seems to be the most elegant solution

更多回答(1 个)

Jan
Jan 2021-6-14
You can open a small window, which contains a stop button. Pressing this button sets a local variable, which can be checked from your code. Catch errors with an error handling:
% [UNTESTED CODE]
function yourCode
FigH = figure('UserData', 0);
ButtonH = uicotrol('Style', 'PushButton', 'String', 'Stop', ...
'Callback', @StopCallback;)
try
resource = reserveYourResource();
for k = 1:1e6
drawnow;
if ~ishandle(FigH) || FigH.UserData
% Figure closed or stop button pressed:
disp('Stopped by user');
break
end
% Some dummy code:
pause(2)
disp(clock)
end
catch ME
disp('Stopped by error')
end
releaseResource(resuource);
end
function StopCallback(ButtonH, EventH)
FigH = ancestor(ButtonH, 'figure');
FigH.UserData = 1;
end

类别

Help CenterFile Exchange 中查找有关 Loops and Conditional Statements 的更多信息

产品


版本

R2020b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by