无法在App Designer MATLAB下同时运行两个函数

无法在App Designer MATLAB下同时运行两个函数,matlab,parallel-processing,matlab-figure,parallels,Matlab,Parallel Processing,Matlab Figure,Parallels,目标 目标是使用应用程序设计器设计的应用程序同时运行两个功能。 一般来说,有3个主要区块 1) 附件一。应用程序包含1个状态按钮(例如停止按钮)和1个按钮(任务) 2) 功能优先任务。在引擎盖下,datetime在每次迭代中都进行采样 3) 功能第二任务。类似地,在引擎盖下,datetime在每次迭代中都进行采样 **为了重现性,我们简化了采样数据时间的示例 程序如下: 函数FirstTask在App1开始/启动时执行 然而,功能SecondTask仅在按下按钮TASK后执行 按下停止按钮后,功

目标

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

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

2) 功能优先任务。在引擎盖下,datetime在每次迭代中都进行采样

3) 功能第二任务。类似地,在引擎盖下,datetime在每次迭代中都进行采样

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

程序如下:

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

然而,功能SecondTask仅在按下按钮TASK后执行

按下停止按钮后,功能FirstTask和功能SecondTask同时终止

观察结果

有三个观察结果

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

2) 按下按钮任务后,按预期执行功能SecondTask

3) 功能FirstTask在按钮任务被按下后停止,尽管它独立于按钮任务

我的问题是,如何处理第三条观察。因为,我们需要同时运行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) 功能优先任务

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) 功能第二任务

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
完整代码附加在此线程中。 非常感谢您对此事的建议。

感谢您的建议。 使用定时器,以下内容可以通过以下方式实现

        app.GraphTimer=timer;
        app.GraphTimer.TimerFcn = @app.FirstTaskx;
        app.GraphTimer.ExecutionMode  = 'fixedRate';
在函数中,在应用程序设计器中

    function FirstTaskx(app,~,~)
        FirstTask(app)
    end
对第二项任务重复相同的步骤。

感谢您的建议。 使用定时器,以下内容可以通过以下方式实现

        app.GraphTimer=timer;
        app.GraphTimer.TimerFcn = @app.FirstTaskx;
        app.GraphTimer.ExecutionMode  = 'fixedRate';
在函数中,在应用程序设计器中

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

对第二个任务重复相同的步骤。

MATLAB基本上是单线程的。不能简单地同时运行两个函数。您必须使用计时器来运行短函数。例如,FirstTask将每秒运行一次,只在循环中执行一次,而不使用
pause
语句。旁注:调用python库时,MATLAB允许进程外执行。正如Chris所说,您必须使用
计时器来触发每个任务的执行。使用
pause(n)
将停止所有Matlab代码的执行,直到暂停时间结束。感谢您的快速回复,一旦我尝试建议Matlab基本上是单线程的,就会更新。不能简单地同时运行两个函数。您必须使用计时器来运行短函数。例如,FirstTask将每秒运行一次,只在循环中执行一次,而不使用
pause
语句。旁注:调用python库时,MATLAB允许进程外执行。正如Chris所说,您必须使用
计时器来触发每个任务的执行。使用
pause(n)
将停止所有Matlab代码的执行,直到暂停时间结束。感谢您的快速回复,我尝试此建议后将进行更新