在 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
的價值。