Как задержать цикл без влияния на GUI - PullRequest
0 голосов
/ 27 февраля 2019

Я работаю в MATLAB с графическим интерфейсом.И у меня есть цикл for и GUI с циклом while глобально, каждый шаг мне нужно отложить примерно на 1 секунду.Но когда я использую pause(1), графический интерфейс застревает, и цикл while перестает работать и не обновляется до завершения цикла.Вот мой код:

count= uicontrol('Style','text',...
'String', '0',...
'Tag','Count',...
'Fontsize',12,...
'Position',[40, 350,35,35]);
i = 0;
while i < 1000
    %do something
    i++;
    disp(i);
end

Это цикл for во вложенной функции:

for m=0:1:10
    %do something
    c = findobj('Tag','Count');
    set(c, 'String', num2str(m));
    pause(1);
end

Но когда я выполняю этот цикл for, текст пользовательского интерфейса не обновляется.А по окончании будет отображаться 10 в тексте пользовательского интерфейса.Я хочу, чтобы он отображал каждый шаг от 1 до 10. Я действительно ценю вашу помощь.Заранее спасибо.

1 Ответ

0 голосов
/ 27 февраля 2019

Попробуйте использовать команду drawnow.Таким образом вы заставляете MATLAB перерисовывать графические элементы.Я не уверен, где разместить эту функцию в вашем коде, но я бы посоветовал вам сначала попытаться поместить ее как последнюю команду в оба цикла, а затем выяснить, где ее важно сохранить.

Некоторое время назад я делал нечто подобное с двумя циклами, один внутри GUI и один в MATLAB-скрипте.Единственный способ запустить оба цикла без блокировки - использовать drawnow.

...