Кто-нибудь знает о более чистом решении для следующего: я запускаю сценарий matlab, который в какой-то момент может потребоваться уничтожить. Нажатие на «cntrl-C» работает, но при отладке открывает случайный файл и может все равно завершиться неудачей в зависимости от того, находятся ли фигуры в середине чертежа.
Лучшее, что я мог придумать: добавить кнопку к фигуре, на которую я смотрю, щелчком мыши сделать «очистить все». Простое выполнение «error» не работает, потому что оно выдает исключение, что некоторая функция Matlab успешно перехватывает и продолжает работать.
Обновление / уточнение: принудительный сбой основывается на очистке некоторой глобальной переменной в основном скрипте.
function myScript()
global foo;
foo = 1;
while 1
x = DoStuff();
sh = figure(1);
if k == 1
killable_window( sh );
end
x.display();
drawnow;
y = foo + 1; % <-- crashes if the callback does 'clear all', which kills global variable foo
end
end
Тогда это грязная версия убиваемого окна:
function [] = killable_window( sh )
S.fh = sh;
S.pb = uicontrol('style','push',...
'units','pix',...
'position',[10 30 80 20],...
'fontsize',12,...
'string','Quit');
set(S.pb,'callback' ,{@pb_call,S})
% Check if 'p' is pressed when focus on button and exec callback
set(S.pb,'KeyPressFcn',{@pb_kpf ,S});
% Check if 'p' is pressed when focus on figure and exec callback
set(S.fh,'KeyPressFcn',{@pb_kpf ,S});
% Callback for pushbutton, clears all variables
function pb_call(varargin)
S = varargin{3}; % Get the structure.
fprintf('force quitting due to button press...\n');
% ghetto: clear everything to force a crash later
% and prevent anyone from successfully catching an exception
clear all;
end
% Do same action as button when pressed 'p'
function pb_kpf(varargin)
if varargin{1,2}.Character == 'p'
pb_call(varargin{:})
end
end
end
итак, если мне не нравится то, что я вижу, я нажимаю кнопку "выйти", и она возвращается на начальный экран, но я теряю переменные в процессе ... есть ли способ выйти, или сделать "ошибку", чтобы никто не смог перехватить исключения?