在 UI 中创建一个暂停回调执行的按钮
有时我们想暂停代码执行以检查应用程序的状态(请参阅调试 )。通过 MATLAB 编辑器运行代码时,可以使用 UI 中的暂停按钮或按 Ctrl + c (在 Windows 上)完成此操作。但是,当从 GUI 启动计算时(通过某些 uicontrol
的回调),此方法不再起作用,并且应通过另一个回调中断回调。以下是这个原则的演示:
function interruptibleUI
dbclear in interruptibleUI % reset breakpoints in this file
figure('Position',[400,500,329,160]);
uicontrol('Style', 'pushbutton',...
'String', 'Compute',...
'Position', [24 55 131 63],...
'Callback', @longComputation,...
'Interruptible','on'); % 'on' by default anyway
uicontrol('Style', 'pushbutton',...
'String', 'Pause #1',...
'Position', [180 87 131 63],...
'Callback', @interrupt1);
uicontrol('Style', 'pushbutton',...
'String', 'Pause #2',...
'Position', [180 12 131 63],...
'Callback', @interrupt2);
end
function longComputation(src,event)
superSecretVar = rand(1);
pause(15);
print('done!'); % we'll use this to determine if code kept running "in the background".
end
function interrupt1(src,event) % depending on where you want to stop
dbstop in interruptibleUI at 27 % will stop after print('done!');
dbstop in interruptibleUI at 32 % will stop after **this** line.
end
function interrupt2(src,event) % method 2
keyboard;
dbup; % this will need to be executed manually once the code stops on the previous line.
end
要确保你了解此示例,请执行以下操作:
- 将上面的代码粘贴到一个名为的新文件中,并将其保存为
interruptibleUI.m
,这样代码就会从文件的第一行开始 (这对第一种方法起作用很重要)。 - 运行脚本。
- 点击,Compute 然后不久点击其中一个 Pause #1 或 Pause #2。
- 确保你能找到
superSecretVar
的价值。