首页 > 解决方案 > App Designer MATLAB下无法同时运行两个函数

问题描述

客观的

目标是使用应用程序设计器设计的应用程序同时运行两个功能。一般来说,有3个主要块

1)应用程序1。应用程序包含 1 个状态按钮(例如,停止按钮)和 1 个按钮(任务)。

2)函数FirstTask。在引擎盖下,每次迭代都会对日期时间进行采样。

3)功能SecondTask。同样,在引擎盖下,每次迭代都会对日期时间进行采样。

** 为了重现性,我们简化了采样数据时间的示例。

程序如下;

函数 FirstTask 在 App1 的开始/启动时执行。

而 Function SecondTask 仅在 Button TASK 被按下后执行。

Function FirstTask 和 Function SecondTask 在按下 STOP BUTTON 后同时终止。

观察

提出了三个意见;

1) 函数 FirstTask 在 App1 开始/启动时按预期执行。

2) 功能 SecondTask 在 Button TASK 被按下后按预期执行。

3) 尽管独立于 Button TASK,但 Function FirstTask 在 Button TASK 被按下后停止。

我的问题是,如何处理观察 3。因为,我们要求 Function FirstTask 和 Function SecondTask 同时运行。

重现上述问题的代码是

1) app1 处的代码。

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

完整的代码附在这个线程中。非常感谢您对此事的任何建议。

标签: matlabparallel-processingmatlab-figureparallels

解决方案


感谢建议。使用计时器,以下可以通过类似的方式实现。

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

在功能中,在应用程序设计器中

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

对第二个任务重复相同的操作。


推荐阅读