【发布时间】: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