【问题标题】:Unable to run two function simultanously under App Designer MATLABApp Designer MATLAB下无法同时运行两个函数
【发布时间】:2020-03-11 01:26:20
【问题描述】:

目标

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

1) 应用程序 1。这些应用程序包含 1 个状态按钮(例如,STOP BUTTON)和 1 个按钮(TASK)。

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

3) 函数SecondTask。同样,在后台,每次迭代都会对日期时间进行采样。

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

流程如下:

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

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

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

观察

提出了三个观察结果;

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

2) Function 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

完整的代码附在这个帖子里。 非常感谢您就此事提供任何建议。

【问题讨论】:

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

标签: matlab parallel-processing matlab-figure parallels


【解决方案1】:

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

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

在函数中,在应用程序设计器中

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

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

【讨论】:

    猜你喜欢
    • 2017-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多