Невозможно запустить две функции одновременно в App Designer MATLAB - PullRequest
1 голос
/ 11 марта 2020

Цель

Цель состоит в том, чтобы одновременно запускать две функции с помощью приложения, которое разрабатывается с использованием дизайнера приложений. В общем, есть 3 основных блока

1) App1. Приложения содержат 1 кнопку состояния (например, кнопка STOP) и 1 кнопку (TASK).

2) Функция FirstTask. Под капотом дата и время выбираются на каждой итерации.

3) Функция SecondTask. Точно так же, под капотом, дата и время выбираются на каждой итерации.

** Для обеспечения воспроизводимости мы упрощаем пример выборки времени данных.

Процедура выглядит следующим образом:

Функция FirstTask выполняется при запуске / запуске App1.

Принимая во внимание, что функция SecondTask выполняется только после нажатия кнопки TASK.

Обе функции FirstTask и Function SecondTask прекращаются одновременно после нажатия кнопки STOP.

Наблюдения

Выполнено три наблюдения;

1) Функция FirstTask выполняется так, как задумано, при запуске / запуске приложения 1.

2) Функция SecondTask выполняется так, как задумано после нажатия кнопки TASK.

3) Функция FirstTask останавливается после нажатия кнопки TASK, несмотря на то, что она не зависит от кнопки TASK.

Мой вопрос заключается в том, как выполнить наблюдение Нет 3. Потому что нам нужно, чтобы Function FirstTask и Function SecondTask запускались одновременно.

Код для воспроизведения вышеуказанной проблемы:

1) Код в приложении 1.

methods (Access = private)
    % Code that executes after component creation
    function startupFcn(app)
        FirstTask(app)
    end
    % Button pushed function: RunSecondTaskButton
    function RunSecondTaskButtonPushed(app, event)
        SecondTask(app)
    end
end

2) Функция FirstTask

function FirstTask(Gui)
initVar=1;
MaximumData=1000; % Maximum before we append further
FirstData=NaT(MaximumData,1); % Prelocate
while Gui.StopButton.Value==0  % Loop while button stop no click
    FirstData(initVar)=datetime('now','Format','HH:mm:ss.SSS');   % add the time vector duration for each day
    initVar=initVar+1;
    pause(1)
end
end

3 ) Функция SecondTask

function SecondTask(Gui)
initVar=1;
MaximumData=1000; % Maximum before we append further
SecondData=NaT(MaximumData,1); % Prelocate
while Gui.StopButton.Value==0  % Loop while button stop no click
SecondData(initVar)=datetime('now','Format','HH:mm:ss.SSS');   % add the time vector duration for each day
    initVar=initVar+1;
    pause(1)
end
end

Полный код прикреплен в этой теме. Очень благодарен за любые советы по этому вопросу.

1 Ответ

0 голосов
/ 13 апреля 2020

Благодаря предложению. Используя таймер, можно реализовать следующее:

        app.GraphTimer=timer;
        app.GraphTimer.TimerFcn = @app.FirstTaskx;
        app.GraphTimer.ExecutionMode  = 'fixedRate';

В функции в конструкторе приложений

    function FirstTaskx(app,~,~)
        FirstTask(app)
    end

Повторите то же самое для второй задачи.

...