Для "бесконечного" цикла, который все еще может быть легко остановлен при выполнении определенного условия, вы можете установить , в то время как условие будет логической переменной (т. Е. Флаг) которые могут быть обновлены в вашем цикле:
keepLooping = true; % A flag that starts as true
while keepLooping
% Read, process, and plot your data here
keepLooping = ...; % Here you would update the value of keepLooping based
% on some condition
end
Цикл while также может быть прерван, если в цикле встречается команда break
или return
.
Пример:
В качестве примера некоторых из основанных на GUI способов, которыми вы можете остановить цикл, вот программа, которая создает простой графический интерфейс, который непрерывно увеличивается и отображает счетчик раз в секунду, используя цикл while. В графическом интерфейсе есть два способа остановить цикл: кнопка или нажатие q , когда окно рисунка находится в фокусе (используя свойство 'KeyPressFcn'
рисунка запустить код при нажатии клавиши). Просто сохраните этот код в m-файле где-нибудь по пути MATLAB и запустите его, чтобы проверить пример:
function stop_watch
hFigure = figure('Position', [200 200 120 70], ... % Create a figure window
'MenuBar', 'none', ...
'KeyPressFcn', @stop_keypress);
hText = uicontrol(hFigure, 'Style', 'text', ... % Create the counter text
'Position', [20 45 80 15], ...
'String', '0', ...
'HorizontalAlignment', 'center');
hButton = uicontrol(hFigure, 'Style', 'pushbutton', ... % Create the button
'Position', [20 10 80 25], ...
'String', 'Stop', ...
'HorizontalAlignment', 'center', ...
'Callback', @stop_button);
counter = -1;
keepLooping = true;
while keepLooping % Loop while keepLooping is true
counter = counter+1; % Increment counter
set(hText, 'String', int2str(counter)); % Update the counter text
pause(1); % Pause for 1 second
end
%---Begin nested functions---
function stop_keypress(hObject, eventData)
if strcmp(eventData.Key, 'q') % If q key is pressed, set
keepLooping = false; % keepLooping to false
end
end
function stop_button(hObject, eventData)
keepLooping = false; % Set keepLooping to false
end
end
В приведенном выше примере используются вложенные функции , так что обратный вызов 'KeyPressFcn'
и кнопка могут получить доступ и изменить значение keepLooping
в рабочем пространстве функции stop_watch
.