Safely interrupt a script/function

34 visualizaciones (últimos 30 días)
Daniel
Daniel el 14 de Jun. de 2021
Respondida: Daniel el 15 de Jun. de 2021
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?

Respuesta aceptada

Daniel
Daniel el 15 de Jun. de 2021
As Walter suggested, onCleanup seems to be the most elegant solution

Más respuestas (1)

Jan
Jan el 14 de Jun. de 2021
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

Categorías

Más información sobre Graphics Performance en Help Center y File Exchange.

Productos


Versión

R2020b

Community Treasure Hunt

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

Start Hunting!

Translated by