Safely interrupt a script/function
36 次查看(过去 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?
采纳的回答
更多回答(1 个)
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
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Loops and Conditional Statements 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!